`
isiqi
  • 浏览: 16065588 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

使用curses管理基于文本的屏幕--(七)

阅读更多

填充

当我们编写更为高级的curses程序时,我们会发现有时我们可以很容易的构建一个逻辑屏幕,然后将这个逻辑屏幕中的所有或是部分内容输出到物理屏幕上。有时,我们会得到一个比实际的物理屏幕要大的逻辑屏幕,并且每次只显示逻辑屏幕的部分内容。

就目前而言,使用curses函数来实现这样的功能对于我们并不是十分容易,因为所有的窗体必须不大于物理屏幕。curses确实提供了一个特殊的数据结构,pad,来操作并不适合普通窗体的逻辑屏幕信息。

pad结构与WINDOW结构相类似,而所有可以用于向窗体输出的函数也可以用于pad。然而,pad确实具有其特殊的创建与刷新例程。

我们使用与创建普通窗体相类似的方法来创建pad:

#include <curses.h>
WINDOW *newpad(int number_of_lines, int number_of_columns);

在这里我们可以注意到其返回为一个指向WINDOW结构的指针,与newwin函数相同。删除pad使用delwin函数,与窗体相同。

pad确实具有不同的刷新例程。因为pad并没有限定一个特定的屏幕位置,我们必须指定我们希望pad出现在屏幕上的区域。我们可以使用下面的prefresh函数来做到:

#include <curses.h>
int prefresh(WINDOW *pad_ptr, int pad_row, int pad_column,
int screen_row_min, int screen_col_min,
int screen_row_max, int screen_col_max);

这会创建一个pad区域,由(pad_row,pad_column)开始,其所定义的区域为(screen_row_min,screen_col_min)到(screen_row_max,screen_col_max)。

curses还提供了另外一个函数,pnoutrefresh。其他用与wnoutrefresh相类似,不过却有更为高效的屏幕更新。

下面我们来看一个简单的程序,pad.c。

试验--使用pad

1 在程序的开始处,我们初始化pad结构,然后创建一个pad,这会返回一个指向pad的指针。我们添加字符来填充pad结构。

#include <unistd.h>
#include <stdlib.h>
#include <curses.h>
int main()
{
WINDOW *pad_ptr;
int x, y;
int pad_lines;
int pad_cols;
char disp_char;
initscr();
pad_lines = LINES + 50;
pad_cols = COLS + 50;
pad_ptr = newpad(pad_lines, pad_cols);
disp_char = ‘a’;
for (x = 0; x < pad_lines; x++) {
for (y = 0; y < pad_cols; y++) {
mvwaddch(pad_ptr, x, y, disp_char);
if (disp_char == ‘z’) disp_char = ‘a’;
else disp_char++;
}
}

2 我们现在可以在退出之前在屏幕上的不同位置绘制出一个不同的pad区域。

prefresh(pad_ptr, 5, 7, 2, 2, 9, 9);
sleep(1);
prefresh(pad_ptr, LINES + 5, COLS + 7, 5, 5, 21, 19);
sleep(1);
delwin(pad_ptr);
endwin();
exit(EXIT_SUCCESS);
}

分享到:
评论

相关推荐

    使用curses管理基于文本的屏幕

    Linux或者Windows+Cygwin开发环境下,使用ncerses进行文本方式的图形界面编程的指导手册!

    Linux程序设计 第6章 使用curses函数库管理基于文本的屏幕

    即使是编写基于字符的全屏幕程序,使用curses函数库的方案也更简明,而程序本身也更独立于具体的终端。在编写这类程序时,使用curses函数库更比直接使用escape转义序列容易得多。curses函数库还可以对键盘进行管理,...

    cd管理系统程序 linux

    界面部分:本程序基于Linux下运行,所以暂时用curses函数库来编写其文本屏幕。分为两个文本窗口和pad窗口实现其选项。 逻辑部分:通过unixC系统函数实现对其的输入输出管理,数据更新,用户操作管理,软件运行失败时...

    ncurses-devel-5.5-24.20060715.x86_64.rpm

    Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。 Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以: 只要您喜欢,您可以使用整个屏幕 创建和管理一个...

    i9n:快速的cljs + nodejs终端(curses)声明式UI

    对于复杂curses应用程序(例如文件管理器,音乐播放器,基于ascii的游戏,甚至是文本编辑器)的中坚力量,除了对core.async的使用以外,对其余代码几乎没有足够的见解,因此它们始终是一个库,而不是一个框架core....

    ncurses安装包

    ncurses(new curses)是一个提供应用程序编程接口(API)的编程库,允许程序员以独立于终端的方式编写基于文本的用户界面。它是用于开发在终端仿真器下运行的“类似GUI的” 应用程序软件的工具包。它还优化了屏幕...

    Linux程序设计中文第4版.part3

    第6章 使用curses函数库管理基于文本的屏幕 第7章 数据管理 第8章 MySQL 第9章 开发工具 第10章 调试 第11章 进程和信号 第12章 POSIX线程 第13章 进程间通信:管道 第14章 信号量、共享内存和消息...

    Linux程序设计中文第4版.part2

    第6章 使用curses函数库管理基于文本的屏幕 第7章 数据管理 第8章 MySQL 第9章 开发工具 第10章 调试 第11章 进程和信号 第12章 POSIX线程 第13章 进程间通信:管道 第14章 信号量、共享内存和消息...

    Linux程序设计中文第4版.part1

    第6章 使用curses函数库管理基于文本的屏幕 第7章 数据管理 第8章 MySQL 第9章 开发工具 第10章 调试 第11章 进程和信号 第12章 POSIX线程 第13章 进程间通信:管道 第14章 信号量、共享内存和消息队列 第...

    C指针原理教程之Ncurses介绍

    Ncurses是一个能提供功能键定义(快捷键),屏幕绘制以及基于文本终端的图形互动功能的动态库。 Ncurses是一个能提供基于文本终端窗口功能的动态库. Ncurses可以: · 只要您喜欢,您可以使用整个屏幕 · 创建和管理一个...

    UNIX操作系统教程 张红光

    第1章绪论.1 1.1操作系统概述1 1.1.1建立操作系统的目标1 1.1.2操作系统是用户与计算机的接口1 1.1.3操作系统是资源管理器2 1.2UNIX系统的主要特性3 1.3UNIX系统的发展史4 1.4开源软件与UNIX的推广发展6 1.4.1开源...

    Linux程序设计 第4版.haozip01

    第6章 使用curses函数库管理基于文本的屏幕 175 6.1 用curses函数库进行编译 175 6.2 curses术语和概念 176 6.3 屏幕 178 6.3.1 输出到屏幕 179 6.3.2 从屏幕读取 180 6.3.3 清除屏幕 180 6.3.4 移动光标 180...

    Linux程序设计 第4版.haozip02

    第6章 使用curses函数库管理基于文本的屏幕 175 6.1 用curses函数库进行编译 175 6.2 curses术语和概念 176 6.3 屏幕 178 6.3.1 输出到屏幕 179 6.3.2 从屏幕读取 180 6.3.3 清除屏幕 180 6.3.4 移动光标 180...

Global site tag (gtag.js) - Google Analytics