Windows 给窗口发送消息,意味着 Windows 调用窗口过程。但是,Windows程序也有一个消息循环,它调用 GetMessage 从消息队列中取出消息,并且调用 DiapatchMessage 将消息发送给窗口过程。
消息能够被分为“进队的” 和 “不进队的”。
进队的消息是由 Windows 放入程序消息队列中。在程序的消息循环中,重新返回并分配给窗口过程。
不进队的消息在 Windows 调用窗口时直接送给窗口过程。
即,进队的消息被“发送”给消息队列,而不进队的消息则“发送”给窗口过程。
在任何情况下,窗口过程都将获得窗口所有的消息——包括进队的和不进队的。窗口过程是窗口的“消息中心”。
进队消息基本上是用户输入的结果,以击键(如 WM_KEYDOWN 和 WM_KEYUP 消息)、击键产生的字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)和鼠标键(WM_LBUTTONDOWN)的形式给出。进队消息还包括时钟消息(WM_TIMER)、刷新消息(WM_PAINT)和退出消息(WM_QUIT)。
不进队消息则是其他消息。在许多情况下,不进队消息来自调用特定的 Windows 函数。例如,当 WinMain 调用 CreateWindow 时,Windows 将给窗口过程发送一个 WM_CREATE 消息。当 WinMain 调用 ShowWindow 时,Windows 将给窗口过程发送 WM_SIZE 和 WM_SHOWWINDOW 消息。当 WinMain 调用 UpdateWindow 时,Windows 将给窗口过程发送 WM_PAINT 消息。
键盘或鼠标输入时发出的进队消息信息,也能在不进队消息中出现。