利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发
准备工作
腾讯云服务器(Ubuntu),C++编程语言
由于想输出界面中包含中文,所以安装库 libncursesw5,依次输入下面三行命令
sudo apt-get install libncursesw5
sudo apt-get install libncursesw5-dbg
sudo apt-get install libncursesw5-dev
编译用如下命令
g++ main.cpp -l ncursesw
ToDoList小工具开发
思路
由于一开始想的就比较多,想做一个工具箱,所以Todolist工具只是其中的一个,这样的话用c++每个小工具封装成一个类肯定更适合。
主程序很简单,都用一个套路,注意由于要输出中文,所以头文件有locale.h, 主程序中也添加了setlocale(LC_ALL,"")
#include <iostream>
#include <ncurses.h>
#include <locale.h>
#include "tool.h"
#include "todolist.h"
using namespace std; int main()
{
setlocale(LC_ALL,"");
initscr();
cbreak();
noecho();
curs_set();
keypad(stdscr,TRUE); refresh(); TODOLIST *tt = new TODOLIST();
tt->display(); getch();
endwin();
return ; }
注意到头文件中有两个自己设定的类tool和todolist
tool类
这里面主要放一些通用的,或者用的比较多的功能,如创建一个窗口,销毁一个窗口,获取当前时间等。
#ifndef _TOOL_H_
#define _TOOL_H_
#include <string>
#include <sstream>
#include <ctime>
#include <ncurses.h>
using namespace std; class TOOL
{
public:
string int2str(int num);
string getCurrentDate();
WINDOW *create_newwin(int height, int width, int starty, int startx);
void destory_win(WINDOW *local_win);
}; #endif
#include "tool.h" string TOOL::int2str(int num)
{
stringstream stream;
stream<<num;
return stream.str();
} string TOOL::getCurrentDate()
{
time_t rawtime;
struct tm *ptminfo; time(&rawtime);
ptminfo = localtime(&rawtime); string ss="时间:"+int2str(ptminfo->tm_year+)+"年"+int2str(ptminfo->tm_mon+)+"月"
+int2str(ptminfo->tm_mday)+"日";
return ss;
} WINDOW *TOOL::create_newwin(int height, int width, int starty, int startx)
{
WINDOW *local_win;
local_win = newwin(height, width, starty, startx);
box(local_win,,);
wrefresh(local_win);
return local_win;
} void TOOL::destory_win(WINDOW *local_win)
{
wborder(local_win, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ');
wrefresh(local_win);
delwin(local_win);
}
TODOLIST类
这里面就是我们小工具的功能实现
一个简单的todolist我在这里分成了四个部分,标题,未完成,已完成,输出/显示窗口,因此要建立四个窗口
每个窗口的尺寸位置都要注意分配。
#ifndef _TODOLIST_H_
#define _TODOLIST_H_
#include <ncurses.h>
#include "tool.h"
#include <string>
#include <cstring>
using namespace std; class TODOLIST
{
public:
TODOLIST();
~TODOLIST();
void display(); TOOL tool;
WINDOW *title_win, *todo_win, *done_win, *info_win; int title_win_h, title_win_w, title_win_y, title_win_x;
int todo_win_h, todo_win_w, todo_win_y, todo_win_x;
int done_win_h, done_win_w, done_win_y, done_win_x;
int info_win_h, info_win_w, info_win_y, info_win_x;
};
#endif
#include "todolist.h" TODOLIST::TODOLIST()
{
title_win_h = ; title_win_y = ;
title_win_x = ; todo_win_h = ;
todo_win_w = ;
todo_win_y = title_win_y + title_win_h + ;
todo_win_x = ; done_win_h = todo_win_h;
done_win_w = todo_win_w;
done_win_y = todo_win_y;
done_win_x = todo_win_x + todo_win_w + ; info_win_h = ; info_win_y = todo_win_y + todo_win_h + ;
info_win_x = ; title_win_w = todo_win_w + done_win_w + ;
info_win_w = title_win_w;
} void TODOLIST::display()
{
//显示标题窗口
title_win = tool.create_newwin(title_win_h,title_win_w,title_win_y,title_win_x);
char currdate[];
string title;
title = tool.getCurrentDate() + " " + "ToDoList 1.0 by 大蓝鲸";
strcpy(currdate,title.c_str()); mvwprintw(title_win,,, currdate);
wrefresh(title_win); //待办事项窗口
todo_win = tool.create_newwin(todo_win_h,todo_win_w,todo_win_y,todo_win_x);
mvwprintw(todo_win, , , "未完成事项");
wrefresh(todo_win); //已完成事项窗口
done_win = tool.create_newwin(done_win_h,done_win_w,done_win_y,done_win_x);
mvwprintw(done_win, , , "已完成事项");
wrefresh(done_win); //信息提示窗口
info_win = tool.create_newwin(info_win_h,info_win_w,info_win_y,info_win_x);
mvwprintw(info_win, , , "提示");
wrefresh(info_win);
} TODOLIST::~TODOLIST()
{ }
编译运行
g++ *.h *.cpp -l ncursesw
./a.out
运行结果
代码放在Github上了,链接
利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发的更多相关文章
- WordPress小工具开发教程(网站公告)
WordPress小工具开发教程(网站公告) BY TIANQIXIN · 2012 年 12 月 26 日 wordpress主题小工具,可以自由拖动到侧边栏,并在前台实现相应功能!一般自带的小 ...
- 开发快平台(M302I小e开发板系列教程)
开发快平台(M302I小e开发板系列教程) 开发块平台ESP8266模块相关理解 一. M302I小e开发板源码注释,源码基于:v1.4.0.8-u34.zip 1. user_main.c /*** ...
- mfc小工具开发之定时闹钟之---功能介绍
使用背景: 之前在xp上用过飞雪日历,感觉挺好用的,还有在音频上的兴趣,促使了我也要自己做一个简单的定时闹钟. 之前开发过图片格式的小工具,没来的急分享,后期整理后,一块奉上,写这篇介绍的时候已近完成 ...
- 头脑王者pk答题小程序开发思路 微信pk答题小程序开发 PK答题游戏你也可以做 微信pk答题游戏
想必大家最近的朋友圈和微信群里都被头脑王者PK答题刷屏了吧.确实很好玩,尤其是2018年的这波风口,手机答题,大家掏出手机,创建一个好友PK,然后你的好友点击进来就可以和你一起PK答题.比之前的游戏好 ...
- C# 小工具开发--DeBugHttp
随着RESTful的流行,前后端分离,我们后端开发人员在开发过程中多http相关方法进行测试.这就是这个小工具的初衷. 代码地址:https://github.com/gdoujkzz/DebugHt ...
- Windows 桌面边栏小工具开发入门
准备为网站做一个桌面通知功能的工具,现在网上一般是html5+js的比较多.虽然html5+js现在是web的开发主流,但是我们应用一般是windows系统.并且应使用中,需要打开谷歌或其 ...
- 微信小程序开发系列(一)小程序开发初体验
开发小程序所需的基本技能 关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领大家快速地学习和掌握小程序的开发. 关于还没有接触过小程序的开发者来说,最关心的问题无非就是,开发小 ...
- [转]微信小程序开发系列(一)小程序开发初体验
本文转自:http://www.cnblogs.com/rennix/p/6287432.html 开发小程序所需的基本技能 关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领 ...
- WPF控件--利用Winform库中的NotifyIcon实现托盘小程序
WPF控件--NotifyIcon 运行界面如下所示: 图1 图2 代码很少,如下所示 ...
随机推荐
- python基础之魔法方法
由于hexo自带的markdown渲染引擎对双下划线做了转义,在正文中看到的魔法方法前后都没有双下划线 setattr.getattr.delattr 可以拦截对对象属性的访问 setattr函数是用 ...
- Hadoop,大数据,云计算三者之间的关系
大数据和云计算是何关系?关于大数据和云计算的关系人们通常会有误解.而且也会把它们混起来说,分别做一句话直白解释就是:云计算就是硬件资源的虚拟化;大数据就是海量数据的高效处理.大数据.hadoop及云计 ...
- Leetcode 703. 数据流中的第K大元素
1.题目要求 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...
- 用pip命令安装Python第三方库
一.准备工作 1. 安装pip (1)下载 pip下载地址:https://pypi.python.org/pypi/pip#downloads (2)安装 下载后解压,控制台下进入解压后的目录,运行 ...
- 文件字节大小显示成M,G和K
//字节大小,K,M,G public static final long KB = 1024; public static final long MB = KB * 1024; public sta ...
- 插入排序Insertion sort 2
原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...
- Bzoj4481 [Jsoi2015]非诚勿扰
Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 147 Solved: 75 Description [故事背景] JYY赶上了互联网创业的大潮,为非 ...
- bzoj 2762: [JLOI2011]不等式组——树状数组
旺汪与旺喵最近在做一些不等式的练习.这些不等式都是形如ax+b>c 的一元不等式.当然,解这些不等式对旺汪来说太简单了,所以旺喵想挑战旺汪.旺喵给出一组一元不等式,并给出一个数值 .旺汪需要回答 ...
- PACM Team(牛客第三场多校赛+dp+卡内存+打印路径)
题目链接(貌似未报名的不能进去):https://www.nowcoder.com/acm/contest/141/A 题目: 题意:背包题意,并打印路径. 思路:正常背包思路,不过五维的dp很容易爆 ...
- A Simple Math Problem(矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 思路:矩阵快速幂模板题,不过因为刚刚入门矩阵快速幂,所以经常把数组f存反,导致本地错误一晚,差点 ...