[置頂]

書單: 安迪葛洛夫:Only paranoid survives.

Feb 1, 2009

About PostQuitMessage(0)

http://www.hkitn.com/article.php/2552/2
這裏我們主要使用了三種消息:WM_PAINT , WM_COMMAND和WM_DESTROY ,但是我們可以隨著程式而是用各種各樣的消息。為了處理不同的消息,在程式中使用了分支結構,所以隨著程式的規模越來越大,這個分支結構也會越來越龐大。

  在這些消息中有兩個點是最為重要的,其一是WM_DESTROY消息,它表示一個銷毀視窗退出應用程式的消息。也是每個程式所必備的。對於這個消息的處理方式就是通過調用PostQuitMessage ( 0 )函數傳遞一個WM_QUIT消息,準備讓由GetMessage 、 TranslateMessage和DispatchMessage三個函數組成的消息迴圈中的GetMessage取得。當消息迴圈中的收到WM_QUIT消息時,GetMessage會傳回0,從而結束消息迴圈。進而釋放各種資源,結束整個程式。另一個重要的地方是DefWindowProc函數。我們的程式無論多大都不可能將所有的消息都處理,所以我們必須有一個機制讓不重要的不需要我們處理的消息,交給windows作業系統為我們處理,這個過程就是由DefWindowProc函數來實現的。 因此當我們按下視窗右上角的差號或者按下左上角系統功能表中的Close命令時,系統會送出WM_CLOSE消息。通常程式的視窗函數不攔截此消息,於是交由DefWindowProc函數來處理。DefWindowProc函數在受到WM_CLOSE消息後,調用DestroyWindow把視窗清除。DestroyWindow又會送出WM_DESTROY消息。程式又如前面講到的一樣來結束程式釋放資源。


其他參考:
http://msdn.microsoft.com/zh-tw/library/dd229215.aspx
大內高手專欄:
揭開訊息迴圈的神秘面紗
作者:蔡學鏞
2005 年 3 月

http://delphi.ktop.com.tw/board.php?cid=168&fid=914&tid=95232


 

No comments: