利用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,"")

 1 #include <iostream>
 2 #include <ncurses.h>
 3 #include <locale.h>
 4 #include "tool.h"
 5 #include "todolist.h"
 6 using namespace std;
 7
 8
 9 int main()
10 {
11     setlocale(LC_ALL,"");
12     initscr();
13     cbreak();
14     noecho();
15     curs_set(0);
16     keypad(stdscr,TRUE);
17
18     refresh();
19
20     TODOLIST *tt = new TODOLIST();
21     tt->display();
22
23
24     getch();
25     endwin();
26     return 0;
27
28 }

注意到头文件中有两个自己设定的类tool和todolist

tool类

这里面主要放一些通用的,或者用的比较多的功能,如创建一个窗口,销毁一个窗口,获取当前时间等。

 1 #ifndef _TOOL_H_
 2 #define _TOOL_H_
 3 #include <string>
 4 #include <sstream>
 5 #include <ctime>
 6 #include <ncurses.h>
 7 using namespace std;
 8
 9 class TOOL
10 {
11 public:
12     string int2str(int num);
13     string getCurrentDate();
14     WINDOW *create_newwin(int height, int width, int starty, int startx);
15     void destory_win(WINDOW *local_win);
16 };
17
18 #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+1900)+"年"+int2str(ptminfo->tm_mon+1)+"月"
            +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,0,0);
    wrefresh(local_win);
    return local_win;
}

void TOOL::destory_win(WINDOW *local_win)
{
    wborder(local_win, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘, ‘ ‘);
    wrefresh(local_win);
    delwin(local_win);
}

TODOLIST类

这里面就是我们小工具的功能实现

一个简单的todolist我在这里分成了四个部分,标题,未完成,已完成,输出/显示窗口,因此要建立四个窗口

每个窗口的尺寸位置都要注意分配。

 1 #ifndef _TODOLIST_H_
 2 #define _TODOLIST_H_
 3 #include <ncurses.h>
 4 #include "tool.h"
 5 #include <string>
 6 #include <cstring>
 7 using namespace std;
 8
 9 class TODOLIST
10 {
11 public:
12     TODOLIST();
13     ~TODOLIST();
14     void display();
15
16     TOOL tool;
17     WINDOW *title_win, *todo_win, *done_win, *info_win;
18
19     int title_win_h, title_win_w, title_win_y, title_win_x;
20     int todo_win_h, todo_win_w, todo_win_y, todo_win_x;
21     int done_win_h, done_win_w, done_win_y, done_win_x;
22     int info_win_h, info_win_w, info_win_y, info_win_x;
23 };
24 #endif
 1 #include "todolist.h"
 2
 3 TODOLIST::TODOLIST()
 4 {
 5     title_win_h = 3;
 6
 7     title_win_y = 0;
 8     title_win_x = 0;
 9
10     todo_win_h = 20;
11     todo_win_w = 40;
12     todo_win_y = title_win_y + title_win_h + 1;
13     todo_win_x = 0;
14
15     done_win_h = todo_win_h;
16     done_win_w = todo_win_w;
17     done_win_y = todo_win_y;
18     done_win_x = todo_win_x + todo_win_w + 1;
19
20     info_win_h = 3;
21
22     info_win_y = todo_win_y + todo_win_h + 1;
23     info_win_x = 0;
24
25     title_win_w = todo_win_w + done_win_w + 1;
26     info_win_w = title_win_w;
27 }
28
29 void TODOLIST::display()
30 {
31 //显示标题窗口
32     title_win = tool.create_newwin(title_win_h,title_win_w,title_win_y,title_win_x);
33     char currdate[128];
34     string title;
35     title = tool.getCurrentDate() + "          " + "ToDoList 1.0         by 大蓝鲸";
36     strcpy(currdate,title.c_str());
37
38     mvwprintw(title_win,1,1, currdate);
39     wrefresh(title_win);
40
41 //待办事项窗口
42     todo_win = tool.create_newwin(todo_win_h,todo_win_w,todo_win_y,todo_win_x);
43     mvwprintw(todo_win, 0, 2, "未完成事项");
44     wrefresh(todo_win);
45
46 //已完成事项窗口
47     done_win = tool.create_newwin(done_win_h,done_win_w,done_win_y,done_win_x);
48     mvwprintw(done_win, 0, 2, "已完成事项");
49     wrefresh(done_win);
50
51 //信息提示窗口
52     info_win = tool.create_newwin(info_win_h,info_win_w,info_win_y,info_win_x);
53     mvwprintw(info_win, 0, 2, "提示");
54     wrefresh(info_win);
55 }
56
57 TODOLIST::~TODOLIST()
58 {
59
60 }

编译运行

g++ *.h *.cpp -l ncursesw
./a.out

运行结果

代码放在Github上了,链接

原文地址:https://www.cnblogs.com/dalanjing/p/9457165.html

时间: 2024-11-07 08:46:21

利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发的相关文章

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

使用背景: 之前在xp上用过飞雪日历,感觉挺好用的,还有在音频上的兴趣,促使了我也要自己做一个简单的定时闹钟. 之前开发过图片格式的小工具,没来的急分享,后期整理后,一块奉上,写这篇介绍的时候已近完成定时闹钟的demo部分,时间是凌晨0点30 功能需求: 1.守护进程,进行全天候开启定时闹钟deamon 2.初期暂时定时,然后 准确报时 3.音乐提醒 4.能够后台挂起,无需打扰用户 mfc小工具开发之定时闹钟之---功能介绍,布布扣,bubuko.com

mfc小工具开发之定时闹钟之---多线程急线程同步

一.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消息机制,通常用来执行后台计算和维护任务,如冗长的计算过程,打印机的后台打印等.用户界面线程一般用于处理独立于其他线程执行之外的用户输入,响应用户及系统所产生的事件和消息等.但对于Win32的API编程而言,这两种线程是没有区别的,它们都只需线程的启动地址即可启动线程来执行任务. 在MFC中,一般用全局函数Afx

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

WordPress小工具开发教程(网站公告) BY TIANQIXIN · 2012 年 12 月 26 日 wordpress主题小工具,可以自由拖动到侧边栏,并在前台实现相应功能!一般自带的小工具功能有限,我们可以通过自己开发小工具来增强wordpress的侧边栏功能.制作wordpress小工具需要用到WP_Widget类,该类位于wp-includes\widgets.php,有兴趣的同学可以打开看看,基本上我们只要扩展这个类就可以开发自己的小工具了.本站以网站公告为例,最终效果图如下:

云开发初探 —— 更简便的小程序开发模式

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由李成熙heyli发表于云+社区专栏 李成熙,腾讯云高级工程师.2014年度毕业加入腾讯AlloyTeam,先后负责过QQ群.花样直播.腾讯文档等项目.2018年加入腾讯云云开发团队.专注于性能优化.工程化和小程序服务. 小程序诞生以来,业界关注小程序前端的技术演进较多,因此众多小程序前端的框架.工具也应运而生,前端开发效率大大提高,而后台的开发技术则关注不多,痛点不少,具体痛在哪里呢? 小程序后台开发之痛 第一个是脑袋瓜疼,怎么疼

C# 小工具开发--DeBugHttp

随着RESTful的流行,前后端分离,我们后端开发人员在开发过程中多http相关方法进行测试.这就是这个小工具的初衷. 代码地址:https://github.com/gdoujkzz/DebugHttp  这是一个wpf小程序. private string GetResponse (string method,string url,string param) { try { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.

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

      准备为网站做一个桌面通知功能的工具,现在网上一般是html5+js的比较多.虽然html5+js现在是web的开发主流,但是我们应用一般是windows系统.并且应使用中,需要打开谷歌或其它的浏览器,这个很麻烦.       在百度中找到一个windows的DesktopTools看以很好用,用来分析了一下.在网上下载http://www.uzzf.com/soft/53006.html 一个小工具.按照http://blog.csdn.net/mrxyz098/article/de

记开发个人图书收藏清单小程序开发(三)DB设计

主要是参考豆瓣的图书查询接口: https://api.douban.com/v2/book/isbn/:9780132350884 返回内容如下: 1 { 2 "rating": { 3 "max": 10, 4 "numRaters": 361, 5 "average": "8.8", 6 "min": 0 7 }, 8 "subtitle": "A H

C++开发的数据库连接查询修改小工具

项目相关地址 源码:https://github.com/easonjim/SQL_Table_Tool bug提交:https://github.com/easonjim/SQL_Table_Tool/issues

开发SharePoint 自定义WebService 的小工具

是一个开源的项目,地址:http://www.codeproject.com/Articles/10728/WSS-Web-Service-DISCO-and-WSDL-Generator-Helper 这个工具的主要作用是把wsdl文件和disco文件转换为aspx文件,具体使用详见这篇文章: http://www.cnblogs.com/chamblee/archive/2012/06/07/2540530.html