Ncurses学习经历(十一)面板库——用户指针

本文详细介绍了如何在Ncurses中使用用户指针来存储自定义信息,如面板的移动和大小调整。通过set_panel_userptr()函数设置用户指针,并使用panel_userptr()获取。示例程序展示了如何利用用户数据进行面板位置和大小的动态修改,通过<Tab>、'r'、'm'等键控制。用户数据结构PANEL_DATA包含坐标、大小、标签和指向下一个面板的指针。
摘要由CSDN通过智能技术生成
1. 使用用户指针
    在上面例子中,使用用户指针在循环里查找下一个要显示的面板。我们可以通过指定一个用
户指针给面板添加自定义信息,这个指针可以指向你想要存储的任何信息。在这个例子中,
我们用指针存储了循环中下一个要显示的面板。其中,用户指针可以用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值