一、程式的誕生
2、afxwinmain執行afxwininit,後者呼叫afxinitthread,把訊息佇列盡量加大到96;
6、cmyframewnd構造呼叫create,產生主視窗,我們在create引數中指定的視窗類是null,於是mfc根據視窗種類,自行的為我們註冊乙個名為「afxframeorview2d」的視窗類;
7、回到initinstance中繼續執行showwindow,顯示視窗;
8、執行updatewindow,於是發出wm_paint;
9、回到afxwinmain,執行run,進入訊息迴圈。
二、程式開始執行
2、wm_paint經由::dispatchmessage送到視窗函式cwnd::defwindowproc中;
3、cwnd::defwindowproc將訊息傳遞過訊息對映**(message map);
4、傳遞過程中發現有相符專案,於是呼叫專案中對應的函式,此函式是應用程式利用begin_message_map和end_message_map之間的巨集設立起來了;
5、標準訊息的處理程式亦有標準命名,例如wm_paint必須有onpaint處理。
三、程式的死亡
1、使用者單擊[file/close],於是發出wm_close;
2、cmyframewnd並沒有設定wm_close處理程式,於是交給預設處理程式
3、預設函式對於wm_destroy處理方式是呼叫::destroywindow,並因而發出wm_destroy;
4、預設的wm_destroy處理方式是呼叫::postquitmessage,因此發出wm_quit;
7、最後回到afxwinmain,執行afxwinterm,結束程式。
乙個簡單完整例子的**:
#include "stdafx.h"
class cmyframewnd:public cframewnd//框架視窗類(負責管理 主視窗);;
/*add,sub,mul,div
lea 取位址中的數值
call 調子程式令
jmp無條件跳轉
je若相等則跳轉
jnz若不相等或不等於0則轉
*/
MFC程式執行過程
一 mfc程式執行過程剖析 相信大家有點暈點了吧,實際程式設計中沒有必要深刻理解這麼多,這些大都是由mfc內部自動幫我們完成的。實際mfc程式設計過程中,其實懂得mfc程式中各個函式的執行流程即可。有時候過於追究mfc細節會白白浪費我們的精力,應該將主要精力放在使用mfc解決實際問題上。二 vc6中...
MFC 執行過程
pthread initinstance 呼叫子類中的initinstance processshellcommand cmdinfo 對命令列進行解釋 ctestdoc ctestdoc 構造文件類物件 cmainframe cmainframe 構造框架視窗物件 cframewnd loadfr...
VC 中的MFC程式的執行過程
程式的誕生 afxwinmain執行afxwininit,後者又呼叫afxinitthread,把訊息佇列盡量加大。cmyframewnd構造函式呼叫create,產生主視窗。我們在create引數中指定的視窗類是null,於是mfc根據視窗種類,自行為我們註冊乙個名為 afxframeorview...