ncurses 库使用介绍: 实现终端 GUI
Posted 此后如竟没有炬火 我便是唯一的光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ncurses 库使用介绍: 实现终端 GUI相关的知识,希望对你有一定的参考价值。
这次 ENGG1340 课程的 group project 是设计并实现一个 text-base game,作为终端上运行的 text-base game,有一个出彩的 GUI 肯定是一个加分项!
在未老师的介绍下,我知道了有 <ncurses.h>
库这么一个神奇的东西;最重要的是,虽然它不属于 C++ 标准库,但是在学校 server 里居然默认下载好了 (可见其出名的功能强大)
据说很多热门的终端程序,例如 Vim,SL 都用到了 ncurses
花了一个下午学习了一下用法,在这里简单的总结一下,并且附上一些简单 GUI 组成的实例
Installation
官方 release 网址在这里
在终端上输入命令 sudo apt-get install libncurses5
进行安装
Compilation
所有使用了 <ncurses.h
库的程序,在编译时需要添加参数 -l ncurses
例: g++ -o test test.cpp -lncurses
初始化窗口对象
使用 initscr()
初始化一个窗口对象 (WINDOW 类)
初始化过后,我们接下来将与该窗口对象进行交互: std::cin/out, scan/printf 等标准输入输出将失效
Ncurses入门-安装与使用
Ncurses入门-(一)安装与使用
Ncurses是什么?
Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。
安装Ncurses
我们可以运行以下命令在Debian系的Linux系统下安装Ncurses:
$ sudo apt-get install libncurses5-dev
My First Window
安装成功以后,我们在try.c
里写如下代码:
//try.c
#include <string.h>
#include <ncurses.h>
int main(int argc,char* argv[]){
initscr();
raw();
noecho();
curs_set(0);
char* c = "My First Window";
mvprintw(LINES/2,(COLS-strlen(c))/2,c);
refresh();
getch();
endwin();
return 0;
}
保存后我们编译以上代码:
$ gcc try.c -o try -lncurses
别忘了-lncurses
接着运行./try
,你能看到如下效果
解释以上代码:
initscr();
初始化curses窗口
raw();
这个函数会阻止字符缓冲,令程序即时处理键盘输入,一些终端命令(中断[Ctrl-c],挂起[Ctrl-z])也会被交给程序处理
noecho();
屏蔽输入字符显示,键盘输入的字符将不被显示
curs_set(0);
调用会屏蔽掉物理指针
mvprintw(LINES/2,(COLS-strlen(c))/2,c);
输出字符串,三个参数分别为x位置,y位置和字符指针
refresh();
刷新屏幕
endwin();
关闭窗口
至此,我们完成这一内容
以上是关于ncurses 库使用介绍: 实现终端 GUI的主要内容,如果未能解决你的问题,请参考以下文章