天天看點

特殊的Windows消息

WM_CREATE消息

       該消息是Windows發送給視圖的第一個消息。由于當應用程式架構調用Create函數時該消息就會被發送,而此時視窗建立還未完成,視窗還不可見,是以在控制函數OnCreate内部,不能調用那些依賴于視窗處于完全激活狀态的Windows函數。

       但是我們可以在被重載的OnInitialUpdate函數内調用這些函數。不過必須注意,對于SDI程式,在視圖生存期間OnInitialUpdate函數可能會被調用多次。

注意:OnInitialUpdate函數是視圖視窗完全建立後,在調用OnDraw函數之前第一個被調用的函數,很多初始化工作可以放在這個函數裡,是以很重要。

WM_CLOSE消息

當使用者從系統菜單中關閉視窗或者父視窗被關閉時,Windows都會發送WM_CLOSE消息。如果在派生視圖類中重新定義了OnClose消息映射函數,就完全可以控制關閉過程。例如:如果需要提醒使用者将變化的内容儲存在檔案中時,就可以将這步工作放在OnClose函數中來完成。隻有在确認了關閉視窗是非常安全的情況下,才可以調用基類的OnClose函數,由它來繼續處理關閉過程。此時,視圖對象和相應的視窗仍然處于活動狀态。

注意:當使用完整的應用程式架構結構時,也可以不使用WM_CLOSE的消息控制函數。作為應用程式架構的高度結構化的程式退出過程的一部分,我們可以通過重載CDocument::SaveModified虛函數來達到這個目的。

WM_QUERYENDSESSION消息

      當使用者退出Windows時,Windows就會發送WM_QUERYENDSESSION消息給所有正在運作的應用程式,而OnQueryEndSession消息映射函數正是用來處理這一消息的。如果我們對WM_CLOSE消息函數編寫了相應的控制函數,則同樣也需要對WM_QUERYENDSESSION 消息編寫相應的控制函數。

WM_DESTROY消息

      Windows在發送WM_CLOSE消息之後,緊接着就會發送WM_DESTROY消息,而OnDestroy消息映射函數正是處理這一消息的。當程式收到該消息時,它将假設此時視類已經完全消失,但仍然處于活動狀态,并且視窗的子視窗還仍然處于活動狀态。利用這個消息的控制函數,就可以在對依賴于目前視窗存在的所有東西做清除工作。不過,一定要記住,應該調用基類的OnDestroy函數,而不能在使用者自己的視圖的OnDestroy函數中“終止”視窗的析構過程,終止析構的處理應該放在OnClose函數中。

繼續閱讀