重温孙鑫《VC++深入编程》
windows程序都是事件驱动的,而且是基于消息的。
windows应用程序,操作系统,计算机硬件之间的交互关系
应用程序---------消息队列
|
|
操作系统
|
|
I/O设备
1,操作系统可以接收I/O设备的信息,但它并不对这一事件做任何反应,并把它封装成MSG后给消息队列。由应用程序来对这一事件作出反应。对事件作出反应的过程就是消息响应。
2,应用程序从消息队列中提取消息,然后通过Windows API通知操作系统执行某个具体的动作。
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
GetMessage()从消息队列中取出消息,经过TranslateMessage(&msg)对一些消息进行翻译解释,然后DispatchMessage(&msg)把消息投递给操作系统,由操作系统调用窗口过程回调函数WindowProc进行消息处理。
LRESULT CALLBACK WindowProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM wParam, // first message parameter LPARAM lParam // second message parameter );
#define CALLBACK __stdcall
实际上CALLBACK是一种调用约定,VC++6.0默认的调用约定为__cdecl,而回调函数WindowProc是属于__stdcall,所以在使用它时,需要有一个调用约定的声明。