• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

SCO UNIX环境下面向对象的程序设计 4

发布: 2007-6-08 22:43 | 作者: seanhe | 来源: | 查看: 19次 | 进入软件测试论坛讨论

领测软件测试网
第四章 增加菜单
大多数交互式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时定义的。

需要说明的是,在InsertSubMenu成员函数的参数中,最后一个参数表示当按下这个菜单项时执行该成员函数。本例在按下打开文件子菜单时执行用户自己定义的成员函数OpenFile。

(MEMBERFUNCTION)TLfrWindow::OpenFile的写发表示该函数的类型为成员函数,其主类为TlfrWindow,这种写法为类型强制转换。

新的示例主窗口类定义如下:

class TlfrWindow:public Twindow {

public:

    TLfrWindow(char *caption,int left,int top,int width,

    int height,int ftcolor,int bkcolor) : 

    TWindow(caption,left,top,width,height,ftcolor,bkcolor){}

    void OpenFile(void);//响应菜单项的成员函数

};  

4.3 响应菜单消息
对每个菜单选项,都有一个可供调用的成员函数,包括用户自己定义的成员函数和Object UNIX Class本身继承的基类成员函数如上例按下退出系统子菜单选项执行的Close函数。

例如,对于菜单项文件|打开文件,对应有成员函数OpenFile将被调用。这里只是显示一个消息框。

void TLfrWindow::OpenFile(void)

{

    MsgDialog(“信息窗口”,”打开一个文件”);

}

当然,您可以定义更加复杂的成员函数来完成自己的实际业务,比如,弹出一个业务操作对话框,或者查询数据库等等。Object UNIX Class Library提供给用户的目的是提供简单的应用程序编程框架,完成用户可以不必完成的操作,封装对用户来说比较复杂的屏幕交互式操作,而使得用户只是简单地在框架的基础上完成自己需要完成的业务,这是Object UNIX Class Library系统提供给您的目的,达到进行快速应用程序开发的目的。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网