利用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 代码很少,如下所示 ...
随机推荐
- 基于jquery的扩展写法
(function($){ $.fn.aa = function(canshu){ html = $(this).text(); alert(html) }})(jQuery); (function( ...
- 一篇博文将JavaScript尽收眼底
简介 这篇文章是为专业程序员介绍的JavaScript语言的,它是一种小巧的语言,如果你熟悉其他的编程语言,那么这篇文章对你来讲不是那么难以理解. JavaScript不是Java,他们是两门完全不同 ...
- hdu 1166线段树 单点更新 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- Codeforces Round #493 (Div. 2)D. Roman Digits 第一道打表找规律题目
D. Roman Digits time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- springMVC新理解
springmvc 中@Controller和@RestController的区别 1. Controller, RestController的共同点 都是用来表示spring某个类的是否可以接收HT ...
- 如何更有效使用 Rational AppScan 扫描大型网站,第 1 部分: 工作原理及技术分析
Rational AppScan 工作原理 Rational AppScan(简称 AppScan)其实是一个产品家族,包括众多的应用安全扫描产品,从开发阶段的源代码扫描的 AppScan sourc ...
- git--------------bug修复流程
当前所有分支: master:主分支 test:测试分支 zs:开发人员分支 ls:开发人员分支 场景:zs正在开发A模块功能,线上环境产生了一个bug. zs的操作流程(当前分支为zs分支): 1. ...
- linux 执行shell脚本的4种方法总结
bash shell 脚本的方法有多种,假设我们编写好的shell脚本的文件名为hello.sh,文件位置在/data/shell目录中并已有执行权限. 方法一:切换到shell脚本所在的目录(此时, ...
- Hadoop大数据生态系统及常用组件(山东数漫江湖)
经过多年信息化建设,我们已经进入一个神奇的“大数据”时代,无论是在通讯社交过程中使用的微信.QQ.电话.短信,还是吃喝玩乐时的用到的团购.电商.移动支付,都不断产生海量信息数据,数据和我们的工作生活密 ...
- canvas利用formdata上传到服务器
1.首先绘制canvas图片 <canvas id="myCanvas" width="100" height="100" style ...