Windows 编程概述

本文对windows编程中涉及的一些基本概念作一个简单的概述。

事件驱动

Windows 应用程序基于事件驱动模型,windows应用程序启动后会一直等待事件的发生。
常见的事件包括,键盘某个按键被按下,鼠标单击,窗口按钮被点击,窗口可见,等等。

消息与消息队列

Windows 操作系统使用消息来通知应用程序事件的发生。当一个事件发生时,windows 会为该事件所对应的应用程序发送一条消息,然后,这条消息就被加入到应用程序的消息队列中。
每个应用程序都有属于自己的消息队列,消息队列包含了windows操作系统向该应用程序发送的所有消息。

消息循环

应用程序在一个消息循环里面不断地检查消息队列,如果消息队列里面存在消息,则将其取出来,并交由对应的窗口过程处理。
消息循环的代码如下所示:

1
2
3
4
while(::GetMessage(&msg, 0, 0, 0)) {
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}

窗口过程

窗口过程实质是一个函数,用于处理消息队列中的消息。
每个窗口对应一个窗口过程(在创建窗口时指定窗口对应的窗口过程),但一个窗口过程可能对应于多个窗口,即多个窗口共用一个窗口过程。
一个窗口过程中可能包含的消息处理代码如下:

1
2
3
4
case WM_KEYDOWN:
if (wParam == VK_ESCAPE)
::DestroyWindow(MainWindowHandle);
return 0;