第九章 窗口对象
本章讲述窗口生成显示连同窗口菜单的设计。Object UNIX Class Library的TWindow类定义了程式主窗口的大多数基本行为。这些行为包括:打开、关闭、显示连同窗口菜单的事件处理。
9.1 TWindow类
Object UNIX Class Library应用程式至少应该有一个主窗口。在应用程式启动之时,主窗口被显示出来。Object UNIX Class Library程式的主窗口通常是个TWindow派生类的事例。实际上,在本系统的定义中TWindow类就是作为主窗口类使用的,当然,您能够做为其他子窗口使用,但是,对于子窗口,我们一般采用对话框方式来替代子窗口。
9.2 初始化和生成窗口对象
如同对话框和控件对象,窗口对象也是和直观界面元素相管理的界面对象。更确切地说,窗口对象表示窗口元素,是通过存储在主应用程式数据成员MainWindow来标识的。窗口的生成包括两个阶段,构造对象和声车工内直观元素。
9.2.1 初始化窗口对象
在基于UNIX文本环境下的交互式Object UNIX Class Library应用程式中,有个典型的程式窗口:覆盖式、带标题、主菜单、信息行等等。通常这些类型属性连同其他的生成属性都是在窗口对象生成之时配置的,而在直观元素生成之时才使用他们。
窗口对象的生成属性,诸如类型、菜单、位置、标题都是放在他的类成员数据之中。
下表是窗口TWindow类数据成员类型的说明:
数据成员
用途
FTColor
Int类型,窗口前景颜色
BKColor
Int类型,窗口背景颜色
MainMenuNum
Int类型,主菜单项数
MainMenuIndex
Int类型,当前主菜单索引
MainMenu
Tmenu类型,指向主菜单对象的指针
SubMenu
TsubMenu类型,指向子菜单对象的指针
MainHead
Tmenu类型,指向主菜单对象列表的头指针
SubHead
TsubMenu类型,指向子菜单对象列表的头指针
BackGroundBuffer
Chtype类型,指向窗口覆盖的屏幕内存区域的指针
ExitFlag
Int类型,退出主窗口标志
FirstShowAboutWindowFlag
Int类型,显示主窗口版本标志
当从TWindow建立新的窗口类时,至少必须定义一个构造函数,他要调用其基类的构造函数:
class TMyWindow : public TWindow {
…
TMyWindow(char *Caption,int Left,int Top,int Width,int Height,
Int FTColor,int BKColor);
…
};
在基类的构造函数中,通过派生类构造函数传递的参数对基类的数据成员进行赋值,配置其窗口属性数据。
下面是TWindow窗口基类的构造函数:
TWindow::TWindow(char *caption,int left,int top,int width,int height,int ftcolor,int bkcolor)
{
Caption=caption;
Left=left;
Top=top;
Width=width;
Height=height;
BKColor=bkcolor;
FTColor=ftcolor;
MainMenu=NULL;//配置主菜单指针为空
MainHead=NULL; //配置主菜单头指针为空
ExitFlag=0;
FirstShowAboutWindowFlag=0;
}
9.2.2 生成窗口元素
在定义好用户自己的主窗口类之后,主窗口对象的生成在应用程式类实例化之后由其成员函数InitMainWindow对主窗口类进行事例化,并增加主窗口的菜单系统,由于该函数需要用户自己重定义,这就意味着,用户的菜单系统连同窗口属性数据的传递都由用户自己配置,这就确保用户通过Object UNIX Class Library应用程式框架接口,定义自己特定的主窗口。
9.3 主窗口菜单系统
在交互式应用程式中,菜单对象是不可缺少的界面元素,下面将讲述菜单对象的定义和生成。
在Object UNIX Class Library的定义中,主菜单对象和子菜单对象分别是两种不同的类结构,虽然其在功能和样式上有其相似性,子菜单作为主菜单的附属对象也就是子对象在界面元素中存在。当激活主菜单对象时,程式显示子菜单列表供用户选择。
由于子菜单作为主菜单的附属对象存在,所以在定义子菜单项时,需要指定对应的主菜单对象。
9.3.1 菜单结构说明
l 主菜单对象
每个主菜单都有其唯一的标识ID,对用户来说,需要指定的是其唯一标识ID、菜单项说明连同热键定义。对于其他的类数据成员,作为系统内部的参数使用,控制菜单的定位连同显示。
在Object UNIX Class Library系统中,主菜单系统采用双向列表来保存主菜单项对象。
class TMenu {
public:
int ID;//唯一标识
int Left,Top;//相对于窗口的位置
int SubLeft,SubTop,SubWidth,SubHeight;//子菜单项位置
int AllSubItemNum;//子菜单项个数
char *Caption;//菜单项标题
int Key;//热键
TSubMenu *SubMenu;//子菜单对象指针
TMenu *Next;//下一个主菜单对象
TMenu *Prev;//上一个主菜单对象
public:
TMenu(int id,char *name,int key)//构造函数
{
Caption=name;
Key=key;
ID=id;
}
};
l 子菜单对象
相对于主菜单来说,每个子菜单也都有其唯一标识ID,对于主菜单来说,主菜单的事件是激活子菜单,而对于子菜单项来说,其事件是激活某个任务,所以在其数据成员中有两种函数指针:FUNCTION和MEMBERFUNCTION,表示普通函数和类成员函数,
对用户来说,需要指定子菜单唯一标识ID,菜单项名称、热键、菜单说明、子菜单项活动标志连同事件成员函数。本菜单系统具备菜单项活动标志,该标志用于菜单连锁属性配置,例如,在编辑系统中,假如您还没有打开一个文档编辑窗口,则保存菜单项则不能被激活,也就是该菜单项无效。通过主窗口的成员函数SetMenuItemState能够对他进行属性配置。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




