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


动系统。 
可想而知,每一个Windows 程序都应该有一个回路如下: 
MSG msg; 
while (GetMessage (&msg; NULL; NULL; NULL)) { 
TranslateMessage (&msg); 
DispatchMessage (&msg); 
} 
// 以上出现的函数都是Windows API 函数 
消息,也就是上面出现的MSG 结构,其实是Windows 内定的一种资料格式: 
/* Queued message structure */ 
typedef struct tagMSG 
{ 
HWND hwnd; 
UINT message; // WM_xxx WM_MOUSEMOVE WM_SIZE。。。 
,例如 , 
WPARAM wParam; 
LPARAM lParam; 
DWORD time; 
POINT pt; 
} MSG; 
7 
…………………………………………………………Page 70……………………………………………………………
接受并处理消息的主角就是窗口。每一个窗口都应该有一个函数负责处理消息,程序员 
必须负责设计这个所谓的「窗口函数」(window procedure,或称为window function )。 
如果窗口获得一个消息,这个窗口函数必须判断消息的类别,决定处理的方式。 
Windows
以上就是 程序设计最重要的观念。至于窗口的产生与显示,十分简单,有专 
API Windows
门的 函数负责。稍后我们就会看到 程序如何把这消息的取得、分派、处 
理动作表现出来。 
MYAPP。EXE 
WinMain(hInst; hPrev; 。。。) 
{ 
MSG msg; 
Messages from RegisterClass(。。。); 
other windows CreateWindow(。。。); 
Mouse Keyboard ShowWindow(。。。); 
Driver Driver PostMessage() UpdateWindow(。。。); 
while(GetMessage(&msg。。。)) { 
TranslateMessage(。。。); 
DispatchMessage(。。。); 
System Application } 
message message return msg。wParam; 
queue queue } 
Window Procedure 
WndProc(hwnd; msg; wParam; lParam) 
{ 
switch (msg) { 
case WM_CREATE: 。。。 
USER SendMessage() case WM_MAND: 。。。 
Module case WM_LBUTTONDOWN: 。。。 
case WM_PAINT: 。。。 
case WM_CLOSE: 。。。 
case WM_DESTROY: 。。。 
Windows default: return DefWindowProc(。。。); 
} 
return(0); 
} 
图1…2 Windows 程序的本体与操作系统之间的关系。 
8 
…………………………………………………………Page 71……………………………………………………………
一个具体而微的Win32 程序 
许多相关书籍或文章尝试以各种方式简化Windows 程序的第一步,因为单单一个Hello 
程序就要上百行,怕把大家吓坏了。我却宁愿各位早一点接触正统写法,早一点看到全 
貌。Windows 的东西又多又杂,早一点一窥全貌是很有必要的。而且你会发现,经过有 
条理的解释之后,程序代码的多寡其实构不成什么威胁(否则无字天书最适合程序员阅 
读)。再说,上百行程序代码哪算得了什么! 
你可以从图1…2 得窥Win32 应用程序的本体与操作系统之间的关系。Win32 程序中最 
具代表意义的动作已经在该图显示出来,完整的程序代码展示于后。本章后续讨论都围绕 
着此一程序。 
makefile makefile
稍后会出现一个 。关于 的语法,可能已经不再为大家所熟悉了。我想 
我有必要做个说明。 
makefile … 
所谓 ,就是让你能够设定某个文件和某个文件相比 比较其产生日期。由其比 
较结果来决定要不要做某些你所指定的动作。例如: 
generic。res : generic。rc generic。h 
rc generic。rc 
: generic。res generic。rc generic。h
意思就是拿冒号( )左边的 和冒号右边的 和 的文件日 
期相比。只要右边任一文件比左边的文件更新,就执行下一行所指定的动作。这动作可 
rc generic。rc 
以是任何命令列动作,本例为 。 
因此,我们就可以把不同文件间的依存关系做一个整理,以makefile
小说推荐
返回首页返回目录