MFC流程解析

2021-06-21 21:40:36 字數 1925 閱讀 8122

extern "c" int winapi

_twinmain(hinstance hinstance, hinstance hprevinstance,

lptstr lpcmdline, int ncmdshow)

int afxapi afxwinmain(hinstance hinstance, hinstance hprevinstance,

lptstr lpcmdline, int ncmdshow)

nreturncode = pthread->exitinstance();

goto initfailure;

} nreturncode = pthread->run();

initfailure:

afxwinterm();

return nreturncode;

}

視窗的建立會有乙個問題,我們希望整個訊息通過我們的訊息執行環境處理環境。然而,因為我們的訊息處理是乙個類成員函式,並且訊息還沒有迴圈還沒有完整的建立起來。整個frame和view的訊息迴圈還沒有加到整個訊息迴圈當中去。所以在建立的時候需要hook一下,讓wndclass的訊息處理函式指標指向我們的全域性訊息處理函式。然後在訊息處理函式當中呼叫我們的類成員函式進行實際的訊息處理。

mfc 視窗訊息流程:

mfc把

windows

的視窗控制代碼

hwnd

封裝成乙個

cwnd

類,每個

mfc視窗類

(對話方塊除外)的

create

最終都是會呼叫基類的

cwnd::createex

過程。在

cwnd::createex

過程中:

1)  呼叫

precreatewindow

虛函式允許使用者在視窗建立之前修改視窗的相關屬性。

2)  呼叫

afxhookwindowcreate

安裝視窗建立鉤子

wh_cbt

: _afxcbtfilterhook (

目的在於將視窗過程替換成

afxwndproc)

。3)  呼叫

::afxctxcreatewindowex

系統建立建立視窗。視窗建立過程中的訊息被轉移

_afxcbtfilterhook

過程。4)  視窗建立完畢後。呼叫

afxunhookwindowcreate

將視窗建立鉤子

wh_cbt

從鉤子鏈中移除。之後的視窗訊息就會被分派到

mfc的視窗過程函式

afxwndproc

中。_afxcbtfilterhook過程:

1)  將建立的

c++類物件與視窗控制代碼關聯。

2)  調到虛函式

presubclasswindow

允許使用者在視窗關聯後做一些額外的事情。例如:修改樣式

modifystyle

。 這是視窗建立後修改資料的最佳之處。無論是

create,

還是通過對話方塊

dodataexchange

關聯的視窗類。都會呼叫到這個函式。

建立方式

precreatewindow

presubclasswindow

oncreate

create 是

是 是subclasswindow 否

是 否對話方塊模板建立的控制項跟隨對話方塊一起建立。這期間並沒有關聯c++

物件。控制項控制代碼與

c++物件的關聯是在

dodataexchange

中完成的。而此時視窗已經建立完成。固然子類化不可能再收到

wm_create

這種建立訊息。

mysql解析流程 mysql執行流程解析

mysql 可以分為 server 層和儲存引擎層兩部分 server 層包括聯結器 查詢快取 分析器 優化器 執行器等,涵蓋 mysql 的大多數核 心服務功能,以及所有的內建函式,所有跨儲存引 擎的功能都在這一層實現,比如儲存過程 觸發器 檢視等 而儲存引擎層負責資料的儲存和提取。其架構模式是外...

MFC建立視窗流程

乙個mfc程式框架 2 框架類 cframewnd 流程 2 在程式入口函式實現 initinstance 1 給框架類物件動態分配空間 自動呼叫它的建構函式 框架類myframe物件建構函式裡建立視窗create 2 框架類物件顯示視窗showwindow 3 框架類物件更新視窗updatewin...

MFC框架程式解析

mfc的 程式框架 mfc訊息對映機制的具體實現方法 在每個能接收和處理訊息的類中,定義乙個訊息和訊息函式靜態對照表,在訊息對映表中,訊息與對應的訊息處理函式指標式成對出現的。某個類能處理的所有訊息及其對應的訊息處理函式的位址都列在這個類所對應的靜態表中。當有訊息需要處理時,程式只要搜尋該訊息靜態表...