6.9 pad
在编写更高级的curses程序时,有时需要先建立一个逻辑屏幕,然后再把它的全部或部分内容输出到物理屏幕上。有时候,如果能有一个尺寸大于物理屏幕的逻辑屏幕,一次只显示该逻辑屏幕的某个部分,其效果往往会更好。
但使用到目前为止所学过的curses函数来实现这一功能并不容易,因为任何窗口的尺寸都不能大于物理屏幕。curses提供了一个特殊的数据结构pad来解决这一问题,它可以控制尺寸大于正常窗口的逻辑屏幕。
pad结构非常类似WINDOW结构,所有执行写窗口操作的curses函数同样可用于pad。pad还有其自己的创建函数和刷新函数。
创建pad的方式与创建正常窗口的方式基本相同:
需要注意的是,这个函数的返回值是一个指向WINDOW结构的指针,这一点与newwin函数相同。pad用delwin函数来删除,这与正常窗口的删除一样。
pad使用不同的函数执行刷新操作。因为一个pad并不局限于某个特定的屏幕位置,所以必须指定希望放到屏幕上的pad范围及其放置在屏幕上的位置。prefresh函数用于完成这一功能:
这个函数的作用是将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的指针。用字符填充这个pad结构(它比终端显示区域的长度及宽度各多出50个字符):
(2)现在将pad的不同区域绘制到屏幕的不同位置上,然后结束程序:
运行这个程序,你将看到如图6-8所示的输出结果。
图 6-8