利用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 代码很少,如下所示 ...
随机推荐
- [LOJ 6000]搭配飞行员
link 其实就是一道二分图匹配板子,我们建立$S$,$T$为源点与汇点,然后分别将$S$连向所有正驾驶员,边权为$1$,然后将副驾驶员与$T$相连,边权为$1$,将数据中给出的$(a,b)$,将$a ...
- 【贪心】【UVA10905】 Children's Game
传送门 Description 给定n个正整数,求他们相连接后能形成的最大整数.例如:12,23这两个数能连接的最大数是2312,. Input 多组数据,每组数据中: 第一行为一个整数n 第二行有n ...
- Ultra-QuickSort POJ - 2299 树状数组求逆序对
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...
- HDU3251 最大流(最小割)
Being a Hero Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- http中有关缓存相关的几个字段
转载自:http://blog.csdn.net/lifeibo/article/details/5979572 Expires.Cache-Control.Last-Modified. ETag是R ...
- [洛谷P2571] [SCOI2010]传送带
题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
- 大话Spring Cloud
研究了一段时间Spring Boot了准备向Spring Cloud进发,公司架构和项目也全面拥抱了Spring Cloud.在使用了一段时间后发现Spring Cloud从技术架构上降低了对大型系统 ...
- 9.1docker容器 跨主机连接
open vswitch 实现跨主机容器连接 准备条件 将本地的网卡 与新建的网桥建立连接 配置 docker 启动项 weave实现跨主机容器连接 null
- CTF线下赛AWD模式下的生存技巧
作者:Veneno@Nu1L 稿费:200RMB 投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿 原文:https://www.anquanke.com/post/id/8467 ...
- github新建托管项目及上传项目
一.新建托管项目 1.注册: 2.点击new repositories新建一个新项目: 3.输入项目名称及项目描述,Create repository: 4.点击右边栏的剪切板图标,记录下你的项目地址 ...