[quote:da047b69ee]第七章 模块和应用程式
编制Object UNIX Class Library应用程式所要做的第一件事情是定义一个应用程式类,这个类是从Object UNIX Class Library的TApplication类派生而来的。应用程式将继承Object UNIX Class Library应用程式的下列属性:
l 生成和显示应用程式主窗口
l 初始化一个应用程式实例
l 初始化菜单对象和任何对话框
l 处理事件消息循环
l 关闭应用程式
把应用程式定义为类不但能够继承TApplication类的属性,而且还能为他增加构造主窗口对象的能力。其中,还能够选择初始化实例重定义缺省操作,包括关闭应用程式和处理应用程式的消息。
7.1 应用程式流程
Object UNIX Class Library应用程式的主程式一般将由四个语句构成:
第一个语句通过调用初始化屏幕curses库函数来初始化应用程式屏幕窗口指针,使得任何的后续程式都能引用该窗口指针。
第二个语句通过调用应用程式对象的构造函数来生成应用程式对象。构造函数也初始化应用程式对象的数据成员。
第三个语句调用应用程式的Run成员函数,然后,他调用InitApplication来执行应用程式实例的初始化。接着,调用InitMainWindow来初始化生成主窗口,通过调用Show函数来显示主窗口。在大多数情况下,将只需要定义InitMainWindow成员函数。
之后,成员函数Run通过电泳MessageLoop来启动应用程式的执行,即开始处理传来的应用程式消息并指导应用程式动作的指令。MessageLoop的使命是处理消息循环,他能持续运行直到程式关闭。
第四个语句是关闭屏幕curses窗口,释放窗口指针,退出应用程式。
下图是Object UNIX Class Library控制应用程式流程的函数调用:
TApplication类
Run
InitMainWindow
InitApplication
MessageLoop
7.2 初始化应用程式
通过重定义那些初始化应用程式对象的成员函数,能够调整执行过程的各个部分。第一个必须编写的成员函数是InitMainWindow。
7.2.1 初始化主窗口
任何的Object UNIX Class Library应用程式都必须从TApplication类下派生。
此处是个最小的应用程式类定义:
class ThelloApp:public Tapplication {
public:
ThelloApp(){};
Virtual void InitMainWindow(void);
};
必须定义一个InitMainWindow成员函数,他负责构造主窗口对象,而且把主窗口对象存放在应用程式对象的数据成员MainWindow之中。此处是个InitMainWindow成员函数的例子。
void ThelloApp::InitMainWindow(void)
{
MainWindow=new TWindow("",1,0,78,25,WHITE_BLUE,
BLUE_BLUE);
}
这个简单的Object UNIX Class Library应用程式有主程式和一个TApplication的派生所构成。TApplication中定义了成员函数定义了成员函数InitMainWindow:
#include “owl.h”
//定义一个TAPplication的派生类
class ThelloApp:public Tapplication {
public:
ThelloApp(){};
Virtual void InitMainWindow(void);
};
//构造ThelloApp的MainWindow数据成员
void ThelloApp::InitMainWindow(void)
{
MainWindow=new Window("Hello UNIX",1,0,78,25,WHITE_BLUE,
BLUE_BLUE);
}
int main(void)
{
THelloApp HelloApp(”HelloApp”);
HelloApp.Run();
}
上列程式是个最小的应用程式,他简单地显示一个带标题”Hello UNIX”的窗口。显然,这个程式什么也不能做。
7.3 运行应用程式
应用程式的消息循环是在程式调用其应用程式对象成员函数Run(Run调用成员函数MessageLoop)时启动的。在程式执行的整个过程之中,消息循环处理到来的任何用户外界消息。Object UNIX Class Library程式将继承MessageLoop,该函数能自动地工作。
成员函数MessageLoop调用主窗口的任何处理消息,在接收到主窗口的退出系统命令后,退出应用程式系统。
7.4 关闭应用程式
在应用程式退出之前,程式必须中断消息循环,关闭应用程式的主窗口便能达到关闭应用程式的目的。由于Object UNIX Class Library提供了一种重定义应用程式的关闭行为的机制,例如在关闭之前检查是否有未关闭的文档,在程式关闭之前,能够做一些适当的保护处理。
下面是用户通过使用触发的主菜单退出系统项试图关闭应用程式时可能出现的现象:
1、 应用程式发送一个关闭窗口的消息到主窗口。
2、 主窗口对象通过调用Close成员函数予以响应。Close函数只在检查了应用程式对象(通过调用他的CanClose成员函数)之后,通过调用Close成员函数来关闭主窗口(因为关闭主窗口等于关闭应用程式)。
3、 应用程式对象的CanClose成员函数返回对主窗口的CanClose成员函数的调用结果,故使主窗口自身能够确定是否应该关闭。
总之,应用程式对象负责确认应用程式的关闭和否;缺省情况下,他在确认之前检查主窗口,当然也能够重新定义主窗口类的CanClose成员函数,以便产生一些其他的关闭行为。假如不想改变缺省行为,也可免去重定义应用程式的成员函数CanClose。
[/quote:da047b69ee]
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




