|
、SIZE_MAXSHOW或SIZE_MAXHIDE
(在WINUSER.H表头档案中分别定义为数字0到4)。也就是说,参数wParam表明视窗是非最小化还是非最大化,是最小化、最大化,还是隐藏。
lParam参数包含了新视窗的大小,新宽度和新高度均为16位元值,合在一起成为32位元的lParam。WINDEF.H中提供了帮助程式写作者从lParam中取出这两个值的巨集,我们将在下一章说明这个巨集。
有时候,DefWindowProc处理完讯息後会产生其他的讯息。例如,假设使用者执行HELLOWIN,并且使用者最终单击了 Close 按钮,或者假设用键盘或滑鼠从系统功能表中选择了 Close ,
DefWindowProc处理这一键盘或者滑鼠输入,在检测到使用者选择了 Close 选项之後,它给视窗讯息处理程式发送一条WM_SYSCOMMAND讯息。WndProc将这个讯息传给DefWindowProc。DefWindowProc给视窗讯息处理程式发送一条WM_CLOSE讯息来回应之。WndProc再次将它传给DefWindowProc。DestroyWindow呼叫DestroyWindow来回应这条WM_CLOSE讯息。DestroyWindow导致Windows给视窗讯息处理程式发送一条WM_DESTROY讯息。WndProc再呼叫PostQuitMessage,将一条WM_QUIT讯息放入讯息伫列中,以此来回应此讯息。这个讯息导致WinMain中的讯息回圈终止,然後程式结束。
伫列化讯息与非伫列化讯息
我们已经谈到过,Windows给视窗发送讯息,这意味著Windows呼叫视窗讯息处理程式。但是,Windows程式也有一个讯息回圈,它呼叫GetMessage从讯息伫列中取出讯息,并且呼叫DispatchMessage将讯息发送给视窗讯息处理程式。
那么,Windows程式是依次等待讯息(类似于普通程式中相同的键盘输入),然後将讯息送到某地方去的吗?或者,它是直接从程式外面接收讯息的吗?实际上,两种情况都存在。
讯息能够被分为「伫列化的」和「非伫列化的」。伫列化的讯息是由Windows放入程式讯息伫列中的。在程式的讯息回圈中,重新传回并分配给视窗讯息处理程式。非伫列化的讯息在Windo |