回 目 录
上 一 章 下 一 章

# 第十三章：屏幕操作

  在这一章里， 我们将看到一些控制屏幕的高级函数。顺便写一些非常有意思的程序。这些程序经常被用于编写基于控制台的游戏。

### 13.1 getyx()函数集

  getyx() 函数可以用来找到当前光标的位置。它还可以根据你设置的屏幕的横、纵坐标移动你的当前光标。getyx()是一个定义的宏，所以你不能向它传送变量的地址。你只能这样调用它：

       getyx(win, y, x);
        /*    win: 窗口的指针
         *    y, x: 光标坐标的y, x值将被赋到这两个变量
         */

  getparyx()用于取得子窗口相对于主窗口的起始坐标。这个函数对于更新子窗口的信息非常有用。当设计类例如多级菜单这样的特殊组件时，存储菜单坐标就会显得十分困难。所以他使用坐标的方式会轻而易举的解决这个问题：在子窗口中建立这个菜单，然后通过getparyx()函数设置这个子窗口对应的起始坐标。

  getbegyx()函数和getmaxyx()函数用于存储当前窗口的起始坐标和结束坐标。通过对这两个函数可以高效的管理主窗口和子窗口的大小和位置。

### 13.2 屏幕转储

  对于游戏开发而言，存储和恢复屏幕的某个区域是十分重要的。scr_dump()函数可以当前的屏幕存入一个指定的文件中（函数原型：scr_dump(const char *file) ——译者注）。之后可以通过scr_restore()调用转储文件来函数恢复屏幕（函数原型：scr_restore(const char *file) ——译者注）。在游戏设计中这两个函数可以用来使游戏在场景切换时快速移动。

### 13.3 窗口转储

  窗口转储同屏幕转储的原理一样。getwin()函数（函数原型：getwin(FILE * filep) ——译者注）用来将窗口内容存储到一个指定的文件中。putwin()函数（函数原型：putwin(WINDOW *win, FILE * filep) ——译者注）则调用相应文件恢复窗口。

  copywin()可以将一个窗口的内容拷贝到另外一个窗口。它将源窗口指定矩形区域的所有内容复制到目的窗口指定的矩形区域。最后的参数用来选择要重写整个目的窗口，还是覆盖所选择的目的窗口的矩形区域。如果参数为真，那么就是非破坏性的。（以下为函数的原型——译者注）

    int	copywin(
    		const WINDOW *src,			/* 源窗口指针 */
    		WINDOW	*dst,				/* 目的窗口指针 */
    		int	sminrow,				/* 源窗口所选矩形区域的最小行数 */
    		int	smincol,				/* 源窗口所选矩形区域的最小列数 */
    		int	dminrow,				/* 目的窗口所选矩形区域的最小行数 */
    		int	dmincol,				/* 目的窗口所选矩形区域的最小列数 */
    		int	dmaxrow,				/* 目的窗口所选矩形区域的最大行数 */
    		int	dmaxcol,				/* 目的窗口所选矩形区域的最达列数 */
    		int	over)					/* 是否覆盖目的窗口 */

回 目 录
上 一 章 下 一 章