《筆記》孫鑫老師MFC第一講(windows程序內部運行原理)

《筆記》孫鑫老師MFC第一講(windows程序內部運行原理)

 

      學習孫鑫老師的VC++視頻終於到一半了,其中有很多東西沒有真正的掌握,所以從新再來一遍,正好寫上筆記記錄下自己的掌握程度。

 

      Windows程序是一種事件驅動的程序設計方法,主要是基於消息的運行。每個事件觸發的消息存在與消息隊列中,每次windows程序從消息隊列中GetMessge(一條),然後TranslateMessge,然後DispatchMessage,在設計窗口的時候會爲該窗口指定一個消息處理的函數WindowProc()用於對Get的消息進行處理,當程序得到一個WM_QUIT消息的時候結束程序的循環。

      Windows程序的運行機制是,首先需要在WinMain函數中設計窗口(這裏指定消息處理的函數),然後對設計的窗口進行Register,接着需要創建這個已經完成註冊的窗口,並且需要用一個HWND的句柄來記錄這個創建的窗口,接着ShowWindow,UpdateWindow,然後進入消息隊列的循環,GetMessage,TranslateMessag,DispatchMessage,直到接受到一個WM_QUIT的消息,程序則推出,在消息處理函數中還必須在默認的消息處理中調用DefWindowProc來爲應用程序沒有處理的消息提供缺省的處理。

 

 

WM_QUIT,WM_DESTROY,WM_CLOSE的區別。

 

WM_DESTORY和WM_CLOSE都是程序員可以處理的消息,而WM_QUIT是不能被捕獲的。

先說WM_CLOSE

WM_CLOSE是當用戶點擊"X"或者在系統菜單裏選擇了關閉。都會傳遞WM_CLOSE的消息,默認的是調用DestroyWindow函數進行處理,如果選擇自己捕獲該消息並且處理,應該當用戶確定要關閉窗口的時候調用DestroyWindow函數,DestroyWindow函數給消息循環發送WM_Destory消息,DefWindowProc函數不會響應DestoryWindow消息,需要程序員調用PostQuitMessage來對資源進行釋放。

 

再說WM_Destory

WM_Destroy消息不會被DefWindowProc處理,只能讓程序員自己對該部分資源進行釋放,如果你沒有對該部分資源處理(調用PostQuitMessage(0))則銷燬了窗口,但是並沒有真正的結束程序,該程序的進程仍然存在。

 

最後WM_QUIT

WM_QUIT是由PostQuitMessage發送的,GetMessage返回FALSE,直接結束消息循環,故該消息不會被程序員捕獲。

 

剛開始學習,錯誤的地方還請糾正。

COPY上這節課的例子。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章