准备工作

腾讯云服务器(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小工具开发的更多相关文章

  1. WordPress小工具开发教程(网站公告)

    WordPress小工具开发教程(网站公告) BY TIANQIXIN · 2012 年 12 月 26 日   wordpress主题小工具,可以自由拖动到侧边栏,并在前台实现相应功能!一般自带的小 ...

  2. 开发快平台(M302I小e开发板系列教程)

    开发快平台(M302I小e开发板系列教程) 开发块平台ESP8266模块相关理解 一. M302I小e开发板源码注释,源码基于:v1.4.0.8-u34.zip 1. user_main.c /*** ...

  3. mfc小工具开发之定时闹钟之---功能介绍

    使用背景: 之前在xp上用过飞雪日历,感觉挺好用的,还有在音频上的兴趣,促使了我也要自己做一个简单的定时闹钟. 之前开发过图片格式的小工具,没来的急分享,后期整理后,一块奉上,写这篇介绍的时候已近完成 ...

  4. 头脑王者pk答题小程序开发思路 微信pk答题小程序开发 PK答题游戏你也可以做 微信pk答题游戏

    想必大家最近的朋友圈和微信群里都被头脑王者PK答题刷屏了吧.确实很好玩,尤其是2018年的这波风口,手机答题,大家掏出手机,创建一个好友PK,然后你的好友点击进来就可以和你一起PK答题.比之前的游戏好 ...

  5. C# 小工具开发--DeBugHttp

    随着RESTful的流行,前后端分离,我们后端开发人员在开发过程中多http相关方法进行测试.这就是这个小工具的初衷. 代码地址:https://github.com/gdoujkzz/DebugHt ...

  6. Windows 桌面边栏小工具开发入门

          准备为网站做一个桌面通知功能的工具,现在网上一般是html5+js的比较多.虽然html5+js现在是web的开发主流,但是我们应用一般是windows系统.并且应使用中,需要打开谷歌或其 ...

  7. 微信小程序开发系列(一)小程序开发初体验

    开发小程序所需的基本技能   关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领大家快速地学习和掌握小程序的开发. 关于还没有接触过小程序的开发者来说,最关心的问题无非就是,开发小 ...

  8. [转]微信小程序开发系列(一)小程序开发初体验

    本文转自:http://www.cnblogs.com/rennix/p/6287432.html 开发小程序所需的基本技能   关于小程序的介绍和使用场景这里不作介绍,这个系列的文章会一步一步地带领 ...

  9. WPF控件--利用Winform库中的NotifyIcon实现托盘小程序

    WPF控件--NotifyIcon   运行界面如下所示:            图1                                             图2 代码很少,如下所示 ...

随机推荐

  1. PowerDesigner 快捷键

    一般快捷键 快捷键 说明 F4 打开检查模型窗口,检查模型 F5 如果图窗口内的图改变过大小,恢复为原有大小即正常大小 F6 放大图窗口内的图 F7 缩小图窗口内的图 F8 在图窗口内中查看全部图内容 ...

  2. FreeMarker + xml 导出word

    转载自:http://hongqiang.iteye.com/blog/1632998 首先介绍几种java导出word方案 1.Jacob是Java-COM Bridge的缩写,它在Java与微软的 ...

  3. Rabbit MQ 面试题相关

    项目中的MQ: #rabbitmq spring.rabbitmq.host=127.0.0.1 主机 spring.rabbitmq.port=5672 端口 spring.rabbitmq.use ...

  4. 「模板」 线段树——区间乘 && 区间加 && 区间求和

    「模板」 线段树--区间乘 && 区间加 && 区间求和 原来的代码太恶心了,重贴一遍. #include <cstdio> int n,m; long l ...

  5. django中处理表单的经典流程

    def form_process_view(request): if request.method == 'POST': # 请求为 POST,利用用户提交的数据构造一个绑定了数据的表单 form = ...

  6. truncate与delete以及drop

    truncate:删除整个表,但不删除定义(删除了整个表的数据,但表结构还在) drop:删除整个表,表数据和表结构都删除了 delete:删除表中数据 比较delete和drop 1.truncat ...

  7. RabbitMQ与Spring集成

    RabbitMQ服务端安装: https://blog.csdn.net/hzw19920329/article/details/53156015 与Spring集成 https://www.cnbl ...

  8. 【BZOJ4818】【SDOI2017】序列计数 [矩阵乘法][DP]

    序列计数 Time Limit: 30 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description Alice想要得到一个长度为n的序 ...

  9. 【游记】GDOI 2017

    Day 0 学校好大>_<! 酒店好高级>_<! 晚上复习代码的时候很困QAQ,中间和hwh面基.复习到SA的时候因为太久没看忘记板子的意思了又背不下来,于是不看了,相信考了也 ...

  10. nginx与php-fpm通讯方式

    nginx和php-fpm的通信方式有两种,一种是tcp socket的方式,一种是unix socke方式. tcp sockettcp socket的优点是可以跨服务器,当nginx和php-fp ...