《深入浅出MFC第2版(PDF格式)》第25章


MainWndProc @1 
AboutBox @2 
在Visual C++ 整合环境中开发程序,不再需要特别准备。DEF 文件,因为模块定义文件中的 
设定都有默认值。模块定义文件中的STUB 指令用来指定所谓的stub 程序(埋在Windows 
程序中的一个DOS 程序,你所看到的This Program Requires Microsoft Windows 或This 
Program Can Not Run in DOS mode 就是此程序发出来的),Win16 允许程序员自设一个 
stub 程序,但Win32 不允许,换句话说在Win32 之中Stub 指令已经失效。 
资源描述档 ( ) 
。RC 
RC 文件是一个以文字描述资源的地方。常用的资源有九项之多,分别是ICON 、CURSOR 、 
BITMAP 、FONT、DIALOG、MENU 、ACCELERATOR 、STRING、VERSIONINFO 。还 
可能有新的资源不断加入,例如Visual C++ 4。0 就多了一种名为TOOLBAR 的资源。这 
些文字描述需经过RC 编译器,才产生可使用的二进制代码。本例Generic 示范ICON 、 
MENU 和DIALOG 三种资源。 
24 
…………………………………………………………Page 87……………………………………………………………
Windows 程序的生与死 
我想你已经了解Windows 程序的架构以及它与Windows 系统之间的关系。对 
Windows 消息种类以及发生时机的透彻了解,正是程序设计的关键。现在我以窗口的诞 
生和死亡,说明消息的发生与传递,以及应用程序的兴起与结束,请看图1…5 及图1…6。 
WinMain(hInst; hPrev; 。。。) 
{ 
MSG msg; 
RegisterClass(。。。); 
WM_CREATE 
CreateWindow(。。。); 
ShowWindow(。。。); 
Message queue 
UpdateWindow(。。。); 
2 while(GetMessage(&msg。。。)) { 1 
TranslateMessage(。。。); 
DispatchMessage(。。。); 
} 
USER 
return msg。wParam; 
Module 
WndProc(hwnd; msg; wParam; lParam) 3 
{ 
switch (msg) { 
case : 。。。 
WM_CREATE
8 case WM_MAND: 。。。 
WM_CLOSE 
case WM_LBUTTONDOWN: 。。。 
WM_QUIT 
5 case WM_PAINT: 。。。 
case WM_MOUSEMOVE: 。。。 
case WM_DESTROY : 。。。 
PostQuitMessage(0); 7 
break; 
default: return DefWindowProc (。。。); 
WM_DESTROY } 
return(0); 
case WM_CLOSE : 
} 6 case WM_CLOSE : 
DestroyWindow(。。。); 
DestroyWindow(。。。); 
(in DefWindowProc) 
图 1…5 窗口的生命周期(详细说明请看图 1…6 ) 
25 
…………………………………………………………Page 88……………………………………………………………
1。 程序初始化过程中调用Create Window ,为程序建立了一个窗口,做为程序的萤 
Create Window WM CREA TE
_ 
幕舞台。 产生窗口之后会送出 直接给窗口函数, 
后者于是可以在此时机做些初始化动作(例如配置内存、开文件、读初始资 
。。。 
料 )。 
2。 程序活着的过程中,不断以GetMessage 从消息贮列中抓取消息。如果这个消 
WM QUIT GetMessage while
_ 0
息是 , 会传回 而结束 循环,进而结束整个程序。 
3。 Dispat chMessage 透过Windows USER 模块的协助与监督,把消息分派至窗口 
函数。消息将在该处被判别并处理。 
4。 程序不断进行2。 和3。 的动作。 
WM CLOSE 
5。 当使用者按下系统菜单中的Close 命令项,系统送出 _ 。通常程序 
Def WindowProc
的窗口函数不栏截此消息,于是 处理它。 
Def WindowProc WM CLOSE Destroy Window
_ 
收到 后, 调用 把窗口清除。 
6。
Destroy Window WM DESTROY 
_ 
本身又会送出 。 
WM DESTROY PostQuitMessage 
_ 
7。 程序对 的标准反应是调用 。 
PostQuitMessage WM QUIT
_ 
8。 没什么其它动作,就只送出 消息,准备让消息循 
环中的GetMessag
小说推荐
返回首页返回目录