弹出式菜单是简单的,但也是最重要的一种菜单,它的特点是在屏幕上任何时刻都可以出现一个弹出式菜单。弹出式菜单被设计成“弹出”并显示的一个窗口,选择在窗口中垂直排列,而且第一个选项为高亮,反显正文。用户可以用快键或点中方式进行菜单选择。目前在大多数流行软件中,弹出式菜单用得最为普遍。如Boland公司的Turbo系列软件,弹出式菜单编制得相当漂亮。编写弹出式菜单有一定的规则,设计时一般必须有以下几部分:
保存菜单出现前的部分屏幕
显示菜单边框(可省去)
显示菜单正文
等待用户响应
处理用户响应(该步可分支出其它菜单)
恢复屏幕为原始状态
1. 保存菜单出现前的部分屏幕
要保存屏幕上的原始内容,必须读取并贮存各屏幕位置上的当前值,用int 10H的8号子功能从某一屏幕位置读一个字符,将返回该字符及其在当前光标出的属性。int 10H的8号子功能调用的入口参数如下:
调用: AH=08
BH=显示页
返回: AH=属性字节
AL=ASCII字符码
下面的函数save-video(),先读取部分屏幕,将其中的信息存入缓冲区,然后清除该部分屏幕。
void save_video(int startx,int starty,int endx,int endy,unsigned int* buf_ptr)
{
union REGS r;
register int i,j;
for(i=startx;i<endx+1;i++)
{
for(i=starty;i<endy+1;i++)
{
goto_xy(j,i);
r.h.ah = 8;
r.h.bh = 0;
*buf_ptr++ = int86(0x10,&r,&r);
puchar(\’\’);
}
}
}
save_video()函数的头四个参数指出所保存区域的左上角及右下角的X,Y坐标。参数buf_ptr是一个整型指针,它指向保存信息的存贮区域,该存贮区域是在调用Save-video函数之前被分配的一块足够容纳被保存屏幕内容的存贮空间。goto-xy(j,i)是光标定位函数,它不断地移动光标扫描过被保存屏幕的每一部分,它使用BIOS 10H号中断的2号子功能。2号子功能的入口参数如下:
调用: AH=02H
BH=页号(图形方式时置0)
DH=行(Y坐标)
DL=列(X坐标)
返回: 无
goto-xy()函数的源代码如下:
void goto_xy(int x,int Y)
{
union REGS regs;
regs.h.ah = 2;
regs.h.dL = y;
regs.h.dh = x;
regs.h.bh = 0;
int6(0x10,®s,®s);
}
2. 显示菜单边的函数
由于本节开发的彩色汉字弹出式菜单函数基于中文文本操作系统,所以菜单的边框是中文方式下的双字节汉字制表符。构成菜单边框的制表符有六种,这些制表符作为汉字对待,因而须首先构造一个显示汉字字符串的函数chineseputs(),chineseputs()函数调用BIOS int 10H的9号子功能显示汉字字符串,10H的09号功能入口参数如下:
调用: AH=09H
BH=显示页
BL=属性(字符方式)或颜色(图形方式)
CX=写字符计数(重复因子)
返回: 无
void chineseputs(int x,int y,char* p,int attrib)
{
union REGS r;
while(*p)
{
r.h.ah = 2;//定位光标
r.h.dl = x++;
r.h.dh = y;
&nb
评论前必须登录!
注册