深入淺出MFC Windows程式的生與死

2021-07-23 04:29:26 字數 955 閱讀 5306

在了解完windows程式(mfc)的基本架構之後,現在讓我們來大體的回顧一下windows程式的執行的流程:

1:程式初始化,初始化過程中呼叫createwindow()為程式建立乙個視窗並傳送訊息wm_create直接給視窗函式(該訊息將會引起一些初始化的工作,例如:配置記憶體,開啟檔案,讀初始化資料等等),並通過showwindow()來顯示視窗。

2:在程式的執行的過程中,程式會不斷地以getmessage從系統訊息佇列中抓取訊息,如果這個訊息是wm_quit , getmessage 會傳回0而結束while迴圈,進而結束整個程式

3:通過windows的user模組的協助與監督分發訊息,將訊息分派至視窗函式,訊息將在此處被判別並處理

4:程式不斷迴圈2->3的操作

5:當使用者按下視窗的關閉命令項的時候,系統會送出訊息wm_close,通常程式的視窗函式不攔截此訊息,於是defwindowproc處理它。

6:defindowproc 收到訊息 wm_close 後,呼叫destorywindow 把視窗清除。destorywindow本身又會送出 wm_destroy。

7:程式對 wm_destory 的標準反應是呼叫postquitmessage .

8:postquitmessage 沒什麼其他操作,就只送出wm_quit 訊息 ,準備讓訊息迴圈中的getmessage 取得 ,如步驟2,結束訊息迴圈

至於為何結束程式的操作如此繁瑣,因為作業系統與應用程式職責不同,2者互相合作, 各自處理自生的事件,並以訊息互相通知,而不可能系統還耦合我們開發的程式,做乙個小實驗,直接攔截wm_destory ,我們仍然可以看到視窗訊息,但是程式並不會中止,還保留在記憶體中,所以我們需要多步操作達到整個程式的結束,而這個過程中就涉及到不斷的傳送訊息完成這多步操作,最後奉上示意圖(圖是盜的。。。汗):

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...

深入淺出ShellExecute

深入淺出shellexecute譯者 徐景周 原作 nishant s q 如何開啟乙個應用程式?shellexecute this m hwnd,open calc.exe sw show 或shellexecute this m hwnd,open notepad.exe c mylog.log...