Ncurses-窗口
前面介绍过标准屏幕 stdscr, stdscr 只是 WINDOW 结构的一个特例。
我们可以使用函数 newwin 和 delwin 来创建和销毁窗口
WINDOW *newwin(int num_of_lines, int num_of_cols, int start_y, int start_x);
int delwin(WINDOW *window_to_delete);
newwin 函数的作用是创建一个新窗口,该窗口从屏幕位置(start_y,start_x)开始,行数和列数分别由参数 num_of_lines 和 num_of_cols 指定。返回一个指向新窗口的指针,如果新窗口创建失败则返回 null。所有的窗口范围必须在当前屏幕范围之内,如果新窗口的任何部分落在当前屏幕范围之外,则 newwin 函数调用失败。通过 newwin 函数创建的新窗口完全独立于所有已存在的窗口。默认情况下,它被放置在任何已有窗口之上,覆盖(但不是改变)它们的内容。
delwin 函数的作用是删除之前通过 newwin 函数创建的窗口。因为调用 newwin 函数可能会给新窗口分配内存,所以当不再需要这些窗口时,不要忘记通过 delwin 函数将其删除。
注:不要尝试删除 curses 自己的窗口 stdscr 和curscr!!!
通用函数
前缀 w 用于窗口,mv 用于光标移动,mvw 用于在窗口中移动光标
int addch(const chtype char);
int waddch(WINDOW *window_pointer, const chtype char);
int mvaddch(int y, int x, const chtype char);
int mvwaddch(WINDOW *window_pointer, int y, int x, const chtype char); int printw(char *format, ...);
int wprintw(WINDOW *window_pointer, char *format, ...);
int mvprintw(int y, int x, char *format, ...);
int mvwprintw(WINDOW *window_pointer, int y, int x, char *format, ...); int mvwin(WINDOW *window_to_move, int new_y, int new_x);
int wrefresh(WINDOW *window_pointer);
int wclear(WINDOW *window_pointer);
int werase(WINDOW *window_pointer);
int touchwin(WINDOW *window_pointer);
int scrollok(WINDOW *window_pointer, bool scroll_flag);
int scroll(WINDOW *window_pointer);
示例:
#include <ncurses.h> WINDOW* create_newwin(int height, int width, int starty, int startx)
{
WINDOW* local_win = NULL;
local_win = newwin(height, width, starty, startx);
box(local_win, , );
wrefresh(local_win);
return local_win;
} void move_win(WINDOW* local_win, int y, int x)
{
wborder(local_win, ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '); // clear border for old win
wrefresh(local_win); mvwin(local_win, y, x);
box(local_win, , ); // reset border
wrefresh(local_win);
} int main()
{
WINDOW* my_win = NULL;
int startx = , starty = , width = , height = ;
int ch = ;
initscr();
cbreak();
keypad(stdscr, TRUE);
starty = (LINES - height) / ;
startx = (COLS - width) / ;
printw("Press F1 to exit");
refresh();
my_win = create_newwin(height, width, starty, startx); while ((ch = getch()) != KEY_F()) {
switch(ch) {
case KEY_LEFT:
move_win(my_win, starty, --startx);
break;
case KEY_RIGHT:
move_win(my_win, starty, ++startx);
break;
case KEY_UP:
move_win(my_win, --starty, startx);
break;
case KEY_DOWN:
move_win(my_win, ++starty, startx);
break;
}
} if (my_win) {
delwin(my_win);
}
endwin();
return ;
}
Ncurses-窗口的更多相关文章
- 编译过程中,termcap.h 文件找不到路径 licli.a终于生成
编译过程中,termcap.h 文件找不到路径 查看是linux 源码下找不到termcap.h文件 安装了所有关于*cap*的源码包也不起作用 今天终于解决了这个问题,搜 ...
- C++ 实现俄罗斯方块
C++ 实现俄罗斯方块 一.实验介绍 1.1 实验内容 本节实验我们进行设计俄罗斯方块前的思路分析,以及介绍ncurses 库的使用方法. 1.2 实验知识点 C++ 编程基础 ncurses 库的使 ...
- ncurses库的一些函数
为了实现一个简单的聊天程序,如果使用普通的输入输出函数,会很凌乱.so,便想着能不能用下 ncurses这个字符图形库 总结一下,就是这样. 使用ncurses时,先需要初始化窗口,程序结束时,主动调 ...
- Ncurses - Panel
当你需要创建许多窗口时,你很快就会发现它们会变得难以管理.Panel library提供了很好的解决方案. Panel 实际上是一个窗口,通过容器 - 栈 来管理,栈顶的 panel 是完全可见的,其 ...
- 利用ncurses库开发终端工具箱(1)—— ToDoList小工具开发
准备工作 腾讯云服务器(Ubuntu),C++编程语言 由于想输出界面中包含中文,所以安装库 libncursesw5,依次输入下面三行命令 sudo apt-get install libncurs ...
- gdb 调试 ncurses 全过程:
转载地址: http://blog.jobbole.com/107759/ gdb 调试 ncurses 全过程: 发现网上的“gdb 示例”只有命令而没有对应的输出,我有点不满意.gdb 是 GNU ...
- C语言图书管理借阅系统——ncurses库的使用
一.前言 作为一只大四狗,最近还跟着大二同学修了一门课(当然不是之前没通过啦),课程是高级语言课程设计,高级语言指的是C语言 :),内容是做一个XX管理系统,我选择了图书管理系统,先介绍下我做的系统: ...
- .NET Core的日志[3]:将日志写入Debug窗口
定义在NuGet包"Microsoft.Extensions.Logging.Debug"中的DebugLogger会直接调用Debug的WriteLine方法来写入分发给它的日志 ...
- JS判断鼠标进入容器方向的方法和分析window.open新窗口被拦截的问题
1.鼠标进入容器方向的判定 判断鼠标从哪个方向进入元素容器是一个经常碰到的问题,如何来判断呢?首先想到的是:获取鼠标的位置,然后经过一大堆的if..else逻辑来确定.这样的做法比较繁琐,下面介绍两种 ...
- Windows API 设置窗口下控件Enable属性
参考页面: http://www.yuanjiaocheng.net/webapi/create-crud-api-1-put.html http://www.yuanjiaocheng.net/we ...
随机推荐
- vue之登录和token处理
应用场景一 Vue刷新token,判断token是否过期.失效,进行登录判断跟token值存储 刷新token和token是否过期的操作都是由后端实现,前端只负责根据code的不同状态来做不同的操作: ...
- win7 vs2012/2013 编译boost 1.55
bjam install stage --toolset=msvc-11.0 --stagedir="C:\Boost\boost_vc_110" link=shared runt ...
- dynamic详解
一.简介 在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查, 改为在运行时解析这些操作. dynamic 类型简化了对 COM API(例如 Office Automatio ...
- C++代码风格指南总结
C++代码风格指南 代码风格的重要性 今天我收到thougthwork笔试没过的消息, 心里确实很难受, 然后师兄说我代码写得很糟糕 细想一下, 我写代码确实是随心所欲, 并没有遵循什么规范; 所以现 ...
- Mysql支持哪几种索引
从数据结构角度 1.B+树索引(O(log(n))):关于B+树索引,可以参考 MySQL索引背后的数据结构及算法原理 2.hash索引:a 仅仅能满足"=","IN&q ...
- 函数-->指定函数--->默认函数--->动态函数--> 动态参数实现字符串格式化-->lambda表达式,简单函数的表示
#一个函数何以接受多个参数#无参数#show(): ---> 执行:show() #传入一个参数 def show(arg): print(arg) #执行 show(123) #传入两个参数 ...
- 通过python脚本获取服务器硬件信息
#!/usr/bin/python # coding:utf-8 """ 采集机器自身信息 1 主机名 2 内存 3 ip与mac地址 4 cpu信息 5 硬盘分区信息 ...
- python习题实例(上)_update18/07/03
用以记录python学习过程中做过的小习题~ ヾ(◍°∇°◍)ノ゙ 1.生成两个列表,分别存放将100以内的偶数&奇数 odd_number=[] even_number=[] for i i ...
- python2x 和 python 3x的区别
1,大环境: python2x: 大神贡献源码,这些源码有自己语言的特色,源码不规范,源码重复代码太多. python崇尚的是优美清晰简单. python3x: 龟叔重新整理,将源码规范化,简单化,统 ...
- 自定义admin(self_admin)
admin.site.register(models.UserInfo)admin.site.register(models.Book,Book_admin)######当下面注册的这个表里面没有这个 ...