〃Generic〃; POPUP 〃&Help〃}
。。。
〃 〃;
Generic Sample Application END
WS_OVERLAPPEDWINDOW; 窗口标睿╟aption)
CW_USEDEFAULT; // left
CW_USEDEFAULT; // top
CW_USEDEFAULT; // width
CW_USEDEFAULT; // height
NULL;
NULL;
height
hInstance;
NULL
);
width
图 1…3 RegisterClass 与 CreateWindow
16
…………………………………………………………Page 79……………………………………………………………
图 wc lpf nWndProc
从 1…3 可以清楚看出一个窗口类别牵扯的范围多么广泛,其中 。 所指
定的函数就是窗口的行为中枢,也就是所谓的窗口函数。注意,Create Window 只产生窗
口,并不显示窗口,所以稍后我们必须再利用ShowWindow 将之显示在屏幕上。又,我
们希望先传送个WM_PAINT 给窗口, 以驱动窗口的绘图动作, 所以调用
Updat e Window 。消息传递的观念暂且不表,稍后再提。
请注意,在Generic 程序中,RegisterClass 被我包装在InitAppl ication 函数之中,
Create Window 则被我包装在InitInstance 函数之中。这种安排虽非强制,却很普遍:
int CALLBACK WinMain (HINSTANCE hInstance; HINSTANCE hPrevInstance;
LPSTR lpCmdLine; int nCmdShow)
{
if (!hPrevInstance)
if (!InitApplication (hInstance))
return (FALSE);
if (!InitInstance (hInstance; nCmdShow))
return (FALSE);
。。。
}
//…………………………………………………………………………………………………………………………………
BOOL InitApplication (HINSTANCE hInstance)
{
WNDCLASS wc;
。。。
return (RegisterClass (&wc));
}
//…………………………………………………………………………………………………………………………………
BOOL InitInstance (HINSTANCE hInstance; int nCmdShow)
{
_hWnd = CreateWindow (。。。);
。。。
}
两个函数(InitAppl ication 和InitInstance )的名称别具意义:
Windows 3。x
■ 在 时代,窗口类别只需注册一次,即可供同一程序的后续每一个
instance
执行实例 ( )使用(之所以能够如此,是因为所有进程共在一个地址空
RegisterClass
间中),所以我们把 这个动作安排在「只有第一个执行个体才会
17
…………………………………………………………Page 80……………………………………………………………
进入」的InitAppl ication 函数中。至于此一进程是否是某个程序的第一个执行
实例,可由WinMain 的参数hPrevInstance 判断之;其值由系统传入。
■ 产生窗口, 是每一个执行实例( instance ) 都得做的动作, 所以我们把
Create Window 这个动作安排在「任何执行实例都会进入」的InitInstance 函数中。
Windows NT Windows 95 Win32
以上情况在 和 中略有变化。由于 程序的每一个执行实
instance Win32
例 ( )有自己的地址空间,共享同一窗口类别已不可能。但是由于 系统令
hPrevInstance 0 RegisterClass Create Window
永远为 ,所以我们仍然得以把 和 按旧习惯
安排。既符合了新环境的要求,又兼顾到了旧源代码的兼容。
InitAppl ication 和InitInstance 只不过是两个自定函数,为什么我要对此振振有词呢?原
因是MFC 把这两个函数包装成CWinApp 的两个虚拟成员函数。第6章「MFC 程序的
生与死」对此有详细解释。
消息循环
初始化工作完成后,WinMain 进入所谓的消息循环:
while (GetMessage (&msg;。。。)) {
TranslateMessage (&msg); // 转换键盘消息
DispatchMessage (&msg); // 分派消息
}
其中的TranslateMessage 是为了将键盘消息转化,Dispat chMessage 会将消息传给窗口函
数去处理。没有指定函数名称,却可以将消息传送过去,岂不是很玄?这是因为消息发
生之时,操作系统已根据当时状态,为它标明了所属窗口,而窗口所属之窗口类别又已
wc lpf nWndProc Dispat chMessage
。 )
经明白标示了窗口函数(也就是 所指定的函数 ,所以
图 所示 Dispa tchMessage USER
自有脉络可寻。请注意 1…2 , 经过 模块的协助,才把消
息交到窗口函数手中。
消息循环中的GetMessage 是Windows 3。x 非强制性(non…preemptive )多任务的关键。应
用程序藉由此动作,提供了释放控制权的机会:如果消息队列上没有属于我的消息,我
就把机会让给别人。透过程序之间彼此协调让步的方式,达到多任务能力。Windows 95 和
…………………………………………………………Page 81……………………………………………………………
Windows NT 具备强制性(preemptive )多任务能力,不再非靠GetMessage 释放CPU 控
制权不可,但程序写法依然不变,因为应用程序仍然需要靠消息推动。它还是需要抓消
息!
窗口的生命中枢 :窗口函数
消息循环中的Dispat chMessage 把消息分配到哪里呢?它透过USER 模块的协助,送到
switch case
该窗口
小说推荐
- Java编程思想第4版[中文版](PDF格式)
- -Page 1-Page 2《Thinking In Java》中文版作者:Bruce Eckel主页:http/BruceEckel.编译:Trans Bot主页:http/memberease~transbot致谢-献给那些直到现在仍在孜孜不倦创造下一代计算机语言的人们!指导您利用万维网的语言进
- 其他
- 最新章:第295章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 其他
- 最新章:第214章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 其他
- 最新章:第37章
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 其他
- 最新章:第4章
- 深入浅出
- 《深入浅出》作者:白小骨晋江VIP20140610完结+1番外非V章节总点击数:67370 总书评数:209 当前被收藏数:764 文章积分:11,386,657文案:每个前男友都是女人掉过的坑,从何典阳这个坑里往外爬的梁温暖一脸血表示,何典阳他这个深坑实在太坑爹。何典阳:我是坑?梁温暖…别看我,我
- 激情
- 最新章:第74章
- 深入浅出[娱乐圈]
- 文案【忠犬影帝攻X傲娇明星受,1V1轻松甜文,前期互相试探,38章在一起后甜甜甜,两人都有细微的变化和成长~这也是我用心构思攻受感情发展的文,但数据有点太惨了,没入V可以全文免费看,还是想求点收藏呀,数据好看点吧,让我开心一下(笑哭.jpg)流量偶像白漾和影帝顾瑜祁关系很僵,传言两人出道时不合而互相
- 激情
- 最新章:第59章
- JMS简明教程(PDF格式)
- -Page 1-JMS1.1规范中文版卫建军2007‐11‐22-Page 2
- 其他
- 最新章:第28章
- SQL语言艺术(PDF格式)
- -Page 1-SQLSSQQLL语言艺术内容介绍本书分为12章,每一章包含许多原则或准则,并通过举例的方式对原则进行解释说明。这些例子大多来自于实际案例,对九种SQL经典查询场景以及其性能影响讨论,非常便于实践,为你数据库应用维护人员阅读。资深 SQL 专家 Stéphane Faroult倾力打
- 其他
- 最新章:第27章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 其他
- 最新章:第143章