有关curses屏幕的输出(curses笔记二)

有关curses屏幕的输出

  除了printw和refresh两个与屏幕输出密切相关的函数以外,还有一些基本的输出有关的函数:

函数 描述
int addch(const chtype char_to_add) 在光标位置添加字符
int addchstr(chtype *const string_to_add) 在光标位置添加字符串
int printw(char *format, …) 以和printf一样的格式化方式在光标位置添加字符串
int refresh(void) 刷新物理屏幕
int box(WINDOW *win_ptr, chtype vertical_char, chtype hprizontal_char) 围绕一个窗口绘制方框
int insch(chtype char_to_insert) 在头部插入一个字符,已有字符右移
int insertln(void) 插入一个空白行,已有行下移
int delch(void) 与insch作用相反
int deleteln(void) 与insertln作用相反
int beep(void) 蜂鸣器发声
int flash(void) 屏幕闪烁

  其中出现了WINDOW和chtype两种在curses库中定义的类型。

  对于curses程序,有一个窗口的概念,其要求是无论何时都必须有一个父窗口占据了整个终端屏幕;父窗口可以用于许多子窗口,子窗口的大小则允许小于等于终端屏幕,且窗口之间是可以重叠的(这与Windows窗口的概念差不多)。其中窗口在程序中被定义为WINDOW类型,WINDOW类型有一个特例被称为stdscr结构(标准窗口,就是第一个curses窗口)。要注意的地方是,stdscr对应的是逻辑屏幕,curses还有一个结构curscr对应于物理屏幕。

  initscr函数的原型为WINDOW *initscr(void),即初始化屏幕后会返回一个指向stdscr窗口的指针,在一些curses需要使用WINDOW类型的指针做一些事情,比如box函数能在某个确定的窗口画一个框。

  至于chtype就是一个比基本字符类型char位数更多的字符类型,在linux一般就是unsigned long 。

  对于文本模式的终端屏幕,就是像Ubuntu系统按 Ctrl+Alt+F1~F6 进入的虚拟终端,初始化后的第一个窗口就会占据整个屏幕设备;而在图形化界面中,由于伪终端 (Ubuntu一般按Ctrl+Alt+T) 本身不会占据整个屏幕设备,所以第一个curses窗口也是不会占据整个设备的,仅仅占据伪终端的整个窗口。
  总之就是占据整个虚拟终端/伪终端/终端的窗口,而不一定是整个实际的屏幕设备。

  开头表格中的函数只要自己上一遍就能明白了,这里就演示一下box函数:

#include 
#include 
#include 

int main(int argc, char **argv)
{
    WINDOW *screen = initscr();
    box(screen, ACS_VLINE, ACS_HLINE);
    refresh();
    sleep(12);
    endwin();
    exit(EXIT_SUCCESS);
}

关于box函数:
  第一个参数就是指定的窗口,这里只有一个父窗口所以只能指定父窗口了;vertical是竖直的意思,hprizontal是水平的意思,很明显第二各参数是竖直打印用的字符,第三个参数是水平打印用的字符 。
  在curses中还提供了打印漂亮的竖直线和水平线的定义,分别是ACS_VLINE和ACS_HLINE 。

  运行结果:

有关curses屏幕的输出(curses笔记二)_第1张图片

你可能感兴趣的:(LINUX_C笔记)