1. 使用用户指针
在上面例子中,使用用户指针在循环里查找下一个要显示的面板。我们可以通过指定一个用
户指针给面板添加自定义信息,这个指针可以指向你想要存储的任何信息。在这个例子中,
我们用指针存储了循环中下一个要显示的面板。其中,用户指针可以用set_panel_userptr()
函数设定。要想访问某个面板的用户指针,就必须以该面板作为panel_userprt()函数的参数,
函数就会返回该面板的用户指针。结束面板的查找后, top_panel()函数就会将其置于面板
栈的顶层。要想将任意一个面板置于面板栈的顶层,只需将该面板作为top_panel()函数的
参数。
2.移动面板和改变面板的大小
move_panel()函数可将面板移动到屏幕上指定的位置,而不是改变面板在栈中的位置。
确保在移动面板窗口时使用move_panel()函数,而不是mvwin()函数。
改变面板大小有点儿复杂,因为没有一个函数可以直接改变面板所关联窗口的大小。一个可
替代的解决方案是按照所需的大小创建一个新窗口,再调用replace_panel()函数来替换相
应面板上的关联窗口。别忘了替换后删除原窗口,使用panel_window() 函数可以找到与该
面板关联的窗口。
下面这个程序就体现了这种思想。你可以像先前那样,用<Tab>键循环查看窗口。如果要改
变当前面板大小或移动当前面板的位置,就要分别按下‘r’或‘m’键,然后使用方向键来调节,
最后以<Enter>键确定大小或者位置.。这个例子利用用户数据保存程序运行的必要数据。
在上面例子中,使用用户指针在循环里查找下一个要显示的面板。我们可以通过指定一个用
户指针给面板添加自定义信息,这个指针可以指向你想要存储的任何信息。在这个例子中,
我们用指针存储了循环中下一个要显示的面板。其中,用户指针可以用set_panel_userptr()
函数设定。要想访问某个面板的用户指针,就必须以该面板作为panel_userprt()函数的参数,
函数就会返回该面板的用户指针。结束面板的查找后, top_panel()函数就会将其置于面板
栈的顶层。要想将任意一个面板置于面板栈的顶层,只需将该面板作为top_panel()函数的
参数。
2.移动面板和改变面板的大小
move_panel()函数可将面板移动到屏幕上指定的位置,而不是改变面板在栈中的位置。
确保在移动面板窗口时使用move_panel()函数,而不是mvwin()函数。
改变面板大小有点儿复杂,因为没有一个函数可以直接改变面板所关联窗口的大小。一个可
替代的解决方案是按照所需的大小创建一个新窗口,再调用replace_panel()函数来替换相
应面板上的关联窗口。别忘了替换后删除原窗口,使用panel_window() 函数可以找到与该
面板关联的窗口。
下面这个程序就体现了这种思想。你可以像先前那样,用<Tab>键循环查看窗口。如果要改
变当前面板大小或移动当前面板的位置,就要分别按下‘r’或‘m’键,然后使用方向键来调节,
最后以<Enter>键确定大小或者位置.。这个例子利用用户数据保存程序运行的必要数据。
例16、一个移动和改变面板大小的例子
#include <panel.h>
typedef struct _PANEL_DATA
{
int x, y, w, h;
char label[80];
int label_color;
PANEL *next;
}PANEL_DATA;
#define NLINES 10
#define NCOLS 40
void init_wins(WINDOW **wins, int n);
void win_show(WINDOW *win, char *label, int label_color);
void print_in_middle(WINDOW *win, int starty, int startx, int