Windows消息循环

首先理解一句话:“Windows”向应用程序发送了一条消息。这里是指Windows调用了该程序内部的一个函数。

当UpdateWindow被调用后,新建的窗口在屏幕便完全可见了。此时,Windows会为其维护一个消息队列。当事件发生时,Windows会自动将这些事件转化为消息,并将其放置在应用程序的消息队列中。

应用程序通过消息循环来获取消息:

while (GetMessage(&msg, NULL, , ))    //从消息队列中获取消息并放在msg结构中
{
TranslateMessage(&msg); //将虚拟键消息转换为字符消息
DispatchMessage(&msg); //调度一个消息给窗口程序
}

在消息循环中,应用程序将获取到的消息返还给Windows,接下来,Windows会将这条消息发送给合适的窗口过程即WndProc来处理:

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_CREATE:
...
return ; ... ... case WM_DESTROY:
PostQuitMessage();
return ;
}
return DefWindowProc(hwnd, message, wParam, lParam);//不进行处理的消息传给此函数
}

综上,窗口过程是由Windows来调用的,即当从消息队列中取出消息并递交给Windows后,Windows把消息内容作为参数,回调给其发送消息的窗口的窗口过程。

注:应用程序如果希望调用自身的窗口过程,则可通过函数SendMessage来实现。

上一篇:(10.09作业)学生选课数据库SQL语句练习题


下一篇:POJ 1655 - Balancing Act - [DFS][树的重心]