第四章 增加菜单
大多数交互式UNIX应用程序的主窗口内都有菜单,它可为用户提供各种选择,如File|Save、File|Open、以及Help。本章将增加一个标准的菜单到范例程序中。
在交互式应用程序环境中,菜单选择属于用户事件。响应菜单选择与响应其它用户事件具有很大的相似性,本章将按以下步骤为范例程序增加菜单:
l 定义菜单
l 加载菜单项到主窗口对象中
l 定义对菜单选择的响应
l 设置菜单的有效性及无效性
4.1 主窗口菜单
应用程序菜单不是单独的对象,而是归属于主窗口。事实上,它作为主窗口的一个属性对象,被存放在包含窗口生成属性的窗口对象数据成员MainMenu字段中,在应用程序初始化主窗口中通过调用主窗口类的成员函数InsertMainMenu来增加主菜单以及通过调用主窗口类的成员函数InsertSubMenu来增加某项主菜单的子菜单。
下面我们给出TlfrApplication类的初始化主窗口函数InitMainWindow的源代码。
void TLfrApp::InitMainWindow(void)
{
MainWindow=new TLfrWindow("Object UNIX Class Program", 1,0,78,25,WHITE_BLUE,BLUE_BLUE);
TMenu *Main1,*Main2;
Main1=new TMenu(1,"C文件",'c');
Main2=new TMenu(2,"V帮助",'v');
MainWindow->;InsertMainMenu(Main1);
MainWindow->;InsertMainMenu(Main2);
MainWindow->;InsertSubMenu(Main1,new TSubMenu(1,"[A]打开文件",'a',"打开文件",TRUE,(MEMBERFUNCTION)TLfrWindow::OpenFile));
MainWindow->;InsertSubMenu(Main1,new TSubMenu(2,"-",0,"",TRUE));
MainWindow->;InsertSubMenu(Main1,new TSubMenu(3,"[X]退出系统",'x',"返回操作系统",TRUE,(MEMBERFUNCTION)TLfrWindow::Close));
MainWindow->;InsertSubMenu(Main2,new TSubMenu(1,"[A]帮助”,
'a',"",TRUE));
}
分析上述程序行可以看出,在实例化主窗口对象后,在程序的第四、五行定义主菜单对象并通过主窗口类的成员函数InsertMainMenu把主菜单对象赋给主窗口主菜单数据成员,作为主窗口的一些菜单对象属性使用。接着通过InsertSubMenu成员函数添加各主菜单项的子菜单项。组成完整的主窗口菜单系统。
主菜单以及子菜单对象的构造函数定义请参阅后面的类说明。
这样,主窗口显示出来时,便把主菜单项同时显示出来。然而,为了赋予菜单选项一定的使命,必须遵循以下步骤来响应菜单选择。
4.2 解释菜单消息
当用户从窗口菜单选项时,窗口能够接收到该命令消息。为了能够处理当选择特定的菜单选项时Object UNIX Class Library系统送来的命令消息,需要定义Object UNIX Class Library命令响应成员函数,对于命令响应成员函数,需要用户在主窗口类中定义特定的成员函数,如下所似:
void OpenFile(void);
该函数和TLfrWindow类中的成员函数一样,需要由用户在定义从TWindow类派生出的派生类TLfrWindow时定义的。
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 对象 程序设计 面向 环境 菜单 函数 窗口 成员 用户 定义 |
注册
个人空间
