MFC一些理解

2021-07-15 05:35:06 字數 2636 閱讀 2454

重點:應用程式啟動機制。

視窗處理。

動態建立,動態判斷。

序列化。

訊息對映。

視窗引數初始化(defwindowproc被註冊成視窗處理函式)

設定了新建立的hook(用於視窗建立時先呼叫hook函式)

將視窗物件和視窗控制代碼做對映關係儲存。

建立視窗

解除安裝hook

messagemap儲存了父類全域性函式(用於獲取父類的訊息)和自己所需要的訊息。

在onwndwsg函式中將使用,在該函式裡首先獲取了messagemap的指標,遍歷所有訊息,如果找不到,繼續查詢父類,還找不到,繼續往上找,直到遇到null。

維護了乙個物件的類的相關資訊,判斷繼承關係,型別關係。

判斷物件的繼承關係,型別關係:獲取自己物件的cruntimeclass(通過runtime_class(myclass)來獲取)例項位址(每個類特有的)與比較的物件 比較cruntimeclass位址,如果相同,說明是同乙個類(型別相同)。不等的話,可以通過cruntimeclass類的成員m_pfngetbaseclass繼續比較物件,如此迴圈,直到相等(說明有關係)或者直到null(說明沒關係)。

物件的cruntimeclass

儲存乙個構建物件(static

cobject

*createobject())的函式指標(m_pfncreateobject

),通過該函式來建立物件。

cframewnd::loadframe函式中呼叫createex,將ccreatecontext例項 附加到cs.lpcreateparams;

在wm_create訊息oncreate函式中呼叫oncreateclient,會根據傳入的runtimeclass資訊,建立view並呼叫view的create函式。

view的create函式將ccreatecontext例項附加到cs.lpcreateparams;在view的wm_create訊息處理函式中獲取到cdocument例項物件位址,使用cdocument的addview將view的位址儲存到document中。最後將cdocument

例項物件位址儲存到view中。

管理。

的onfilenew,接著在煉表裡拿取文件模板物件,呼叫模板的opendocumentfile函式開啟新文件,接著使用createnewdocumnet建立文件物件,createnewframe使用loadframe來建立。單文件和多文件最大的區別在於,單文件維護了乙個文件物件,而多文件維護了乙個文件鍊錶。

序列化需要重寫serialize,記得呼叫父類的serialize。建立carchive例項,儲存物件。

_init_student物件在程式啟動時,呼叫建構函式將該類的cruntimeclass

例項位址儲存到afxgetmodulestate()

變數中的煉表裡m_classlist.

當我們呼叫《操作符對例項物件位址操作時(需要是繼承cobject類),carchive呼叫writeobject函式來寫入類的資訊(類名稱,編號),最後呼叫serialize

虛函式來儲存物件資料。

當我們呼叫》操作符對類指標操作時,呼叫的是我們宣告的全域性友元函式,首先呼叫readobject,從檔案中讀取類名稱,編號,根據類名稱在afxgetmodulestate()

的煉表裡查詢相應的cruntimeclass

例項,並且判斷下版本號;獲取該例項後,使用createobjet

函式來建立相應物件。最後呼叫物件的serialize

虛函式來讀取物件的資料,將該建立的物件位址值賦予我們的指標。

版本資訊:implement_serial

巨集第三個引數需要新增versionable_schema

控制類的版本,在我們讀取資料時,還需要判斷版本(carchive有乙個getobjectschema

方法),來支援舊版本。

updatedata

函式會呼叫dodataexchange在裡面會呼叫ddx_***

函式然後根據控制項id呼叫getdlgitem

獲取控制代碼,然後進行相應操作。

MFC的一些記錄

型別 mfc 將c 的關鍵字用巨集定義成以下內容。mfc型別 意思 c 型別 bool,boolean 布林型boolean byte 1 位元組數值型 char word 2 位元組數值型 short dword 4 位元組數值型 int uint 無符號整型 unsigned int void ...

MFC的一些函式

1.控制代碼 資源的表示。類似於指標 hicon 圖示控制代碼 hcursor 游標控制代碼 hwnd 視窗控制代碼 hinstance 應用程式例項控制代碼 2.msg structure hwnd message 訊息號 wparam 關於訊息的附加資訊 lparam 關於訊息的附加資訊 tim...

MFC一些語法筆記

1.類似c語言sprintf的用法 cstring str1 str1.format t id是 d i 把變數i的值變成字串 t是乙個巨集,作用是讓你的程式支援unicode編碼。因為windows使用兩種 字符集ansi和unicode,前者就是通常使用的單 位元組方式,但這種方式處理像中文這樣...