zoukankan      html  css  js  c++  java
  • 使用 curses 函数库管理基于文本的屏幕

    curses 函数库提供了终端无关的方式来编写全屏幕的基于字符的程序。curses 还可以管理键盘,提供了一种简单易用的非阻塞字符输入模式。

    curses 函数库能够优化光标的移动并最小化需要对屏幕进行的刷新,从而也减少了必须向字符终端发送的字符数目。

    curses 函数库有多种不同的实现版本。Linux 使用的是 ncurses(new curses),可以使用 sudo apt-get install libncurses5-dev 安装。

    在编译时使用 -lncurses 选项来链接 curses 函数库

    gcc hello.c -lncurses
     1 #include <ncurses.h>
     2 
     3 int main()
     4 {
     5     initscr();
     6     move(5, 15);
     7     printw("%s", "hello world");
     8     refresh();
     9     getch();
    10     endwin();
    11     return 0;
    12 }

    运行后显示如下:

    curses 的概念

    curses 例程工作在屏幕、窗口和子窗口上。所谓屏幕就是你正在写的设备(通常是终端屏幕,也可能是xterm屏幕)。屏幕占据了设备上全部的可用显示面积,当然,如果设备是X视窗中的一个终端窗口,则屏幕就是该终端窗口内所有可用的字符位置。无论何时,至少存在一个 curses 窗口,我们称之为 stdscr,它与物理屏幕的尺寸完全一样。你可以创建一些尺寸小于该屏幕的窗口,窗口可以互相重叠,它们还可以拥有自己的多个子窗口,但每个子窗口必须总是被包含在它的父窗口内。

    curses 函数库用两个数据结构来映射终端屏幕,它们是 stdscr 和 curscr。两者中,stdscr 更重要,它会在 curses 函数产生输出时被刷新。stdscr 数据结构对应的是“标准屏幕”,是 curses 程序中默认输出窗口。curscr 数据结构和 stdscr 类似,但它对应的是当前屏幕的样子。在程序调用 refresh 函数之前,输出到 stdscr 上的内容不会显示在屏幕上。curses 函数库在调用 refresh 函数时比较 stdscr(屏幕将会是什么样子) 和 curscr(屏幕当前时什么样子)之间的不同之处,然后根据这个差异来刷新屏幕。

    逻辑屏幕的布局通过一个字符数组来实现,它以屏幕的左上角——坐标(0,0)为起点,通过行号和列号来组织。所有的 curses 函数使用的坐标都是 y 值(行号)在前,x 值(列值)在后。

    示例详解:

    WINDOW *initscr(void);

    initscr 函数将终端屏幕初始化为 curses 模式,它用来清除屏幕上所有的字符,并等待下一步处理。所以在调用其它的 curses 函数前,要先调用 initscr() 函数初始化屏幕。如果成功,返回一个指向 stdscr 结构的指针;如果失败,输出一条诊断错误信息并使程序退出。

    int move(int new_y, int new_x);

    move 函数用来把逻辑光标的位置移动到指定地点。

    int printw(char* format, ...);

    采用与 printf 函数相同的方法对字符串进行格式化,然后将其添加到光标的当前位置。

    int refresh(void);

    当使用 printw 函数打印时,字符串实际上是打印到 stdscr 的虚拟窗口上,没有直接输出到屏幕,而是在 stdscr 的缓冲区中。为了显示这些缓冲区中的数据,必须使用 refresh() 函数告诉 curses 系统将缓冲区的内容输出到屏幕。

    int getch(void);

    获取一个字符。

    int endwin(void);

    退出 curses 模式,释放 curses 子系统和相关数据结构占用的内存。

  • 相关阅读:
    FastDfs
    git入门大全
    Dynamic Compilation and Loading of .NET Objects
    ASP.NET MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
    Windows系统不同磁盘间的扩容教程
    服务器Windows 2008 R2 安装SQL 2008 R2
    Windows实现内网IPMI端口转发
    FreeBSD 安装过程
    linux安装Zabbix监控
    Linux VPS实用简单安全配置
  • 原文地址:https://www.cnblogs.com/jingyg/p/5728361.html
Copyright © 2011-2022 走看看