第一章 Hello,MFC

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

首先是几个名词解释:

SDK - Software Development Kit

MFC - Microsoft Foundation Class

传统的C程序从第一行带有main函数的语句开始执行,到main函数返回值结束。在首尾行之间,函数main会调用其它函数,而这些函数可能会调用更多的函数,但始终是程序而不是操作系统决定何时调用哪个函数。

Windows函数不是这么执行的,它采用了事件驱动的模型,应用程序通过处理操作系统发来的消息来响应事件。具体模型见书上图1-1。

消息伴随的是4个入口参数:消息所指窗口的句柄、一个消息ID和两个名为wParam和lParam的32位参数。窗口句柄是一个唯一的标识窗口的32位值。消息ID是标识消息类型的一个数值,比如:WM_CREATE、WM_PAINT等。

简单Windows程序的执行顺序:

Winmain函数首先调用API函数RegisterClass来注册一个WNDCLASS结构的窗口类,然后调用CreateWindow函数来生成窗口,接着调用ShowWindow(如果生成时使用了WS_VISIBLE则不用)和UpdateWindow函数来让其显示出来并立即刷新。

接下来进入消息循环,反复的调用GetMessage、TranslateMessage和DispatchMessage这3个函数。GetMessage函数从消息队列中获得出口的结构为MSG的消息并将其从队列中删除。TranslateMessage函数将键盘消息转换为更容易使用的WM_CHAR消息。DispatchMessage函数则将消息发送到窗口的消息处理(回调)函数去。

消息处理(回调)函数:在WNDCLASS中有个lpfnWndProc成员,指向了消息处理函数的地址。所谓回调函数就是指该函数是不经过用户手动调用的,操作系统根据WNDCLASS的lpfnWndProc成员内容找到该函数并自动调用以进行消息处理。该函数一般由一个switch构成,检查并处理不同的消息。在最后未手动处理的消息要通过调用DefWindowProc函数来进行默认处理。

当窗体收到WM_DESTROY消息时,应该调用PostQuitMessage函数,使GetMessage函数返回false以退出消息循环结束程序,否则窗体关了,而程序还在执行,这是不正常的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航