|
行上,水平方向和垂直方向都位於第四个参数指定的矩形中央。因此,这个函式呼叫将让字串「Hello, Windows
98!」显示在显示区域的中央。
一旦显示区域变得无效(正如在改变大小时所发生的情况一样),WndProc就接收到一个新的WM_PAINT讯息。WndProc通过呼叫GetClientRect取得变化後的视窗大小,并在新视窗的中央显示文字。
WM_DESTROY讯息
WM_DESTROY讯息是另一个重要讯息。这一个讯息指示,Windows正在根据使用者的指示关闭视窗。该讯息是使用者单击Close按钮或者在程式的系统功能表上选择
Close时发生的(在本章的後面,我们将详细讨论WM_DESTROY讯息是如何生效的)。
HELLOWIN通过呼叫PostQuitMessage以标准方式回应WM_DESTROY讯息:
PostQuitMessage (0) ;
该函式在程式的讯息伫列中插入一个WM_QUIT讯息。前面提到过,GetMessage对於除了WM_QUIT之外的从讯息伫列中取出的所有讯息都传回非0值。而当GetMessage得到一个WM_QUIT讯息时,它传回0。这将导致WinMain退出讯息回圈,并终止程式。然後程式执行下面的叙述:
return msg.wParam ;
结构的wParam栏位是传递给PostQuitMessage函式的值(通常是0)。然後return叙述将退出WinMain并终止程式。
WINDOWS程式设计的难点
即使有了对HELLOWIN的说明,读者对程式的结构和原理可能仍然觉得神秘。在为传统环境编写简单的C程式时,整个程式可能包含在main函式中。而在HELLOWIN中,WinMain只包含了注册视窗类别,建立视窗,从讯息伫列中取出讯息和发送讯息所必须的程式码。
程式的所有实际动作均在视窗讯息处理程式中发生。在HELLOWIN中,这些动作不多,WndProc只是简单地播放了一个音效档案并在视窗中显示一个字串。但是在後面的章节中,读者将发现,Windows程式所作的一切,都是回应发送给视窗讯息处理程式的讯息。这是概念上的主要难点之一,在开始写作Windows程式之前,必须先搞清楚。
别呼叫我,我会呼叫您
前面我们提到过,程式写作者已经熟悉了使用作业系统呼叫的做法。例如,C程式写作者使用fopen函式打开档案。 |