MFC 學習筆記一

2022-07-24 20:42:15 字數 1387 閱讀 7355

通過近段時間的mfc學習,對訊息機制有了更深入的理解,訊息鏈的建立,runtimeclass的理解中,對於類的組織鏈的精妙設計很嘆服,這些主要是在看mfc深入淺出的過程中體會到的,整個學習過程中,感覺記住mfc的類層次圖是非常重要和必需的。下面就對自己所學習的rtti(執行時期型別辨識)進行整理:

首先必須清楚這幾個巨集的定義:

declare_dynamic/implement_dynamic巨集:

#define declare_dynamic(class_name)  \

public: \

static cruntimeclass class##class_name; \

virtual cruntimeclass* getruntimeclass() const;

#define implement_dynamic(class_name,base_class_name) \

_implement_runtimeclass(class_name,base_class_name,0xffff,null)

#define _implement_runtimeclass(class_name,base_classs_name,wschema,pfnnew) \

static char _lpsz##class_name = #class_name; \

cruntimeclass class_name::class##class_name = \

#define runtime_class(class_name)   (&class_name::class##class_name)

下面來看兩個資料結構(以上已經出現的cruntimeclass和afx_classinit:

struct cruntimeclass

//attributes

lpcstr m_lpszclassname;

int m_nobjectsize;

uint m_wschema;

cobject* (pascal* m_pfncreateobject)();

cruntimeclass* m_pbaseclass;

static cruntimeclass* pfirstclass;

cruntimeclass* m_pnextclass;

struct afx_classinit

afx_classinit(cruntimeclass* pnewclass);}

寫到這裡,發現了其實類別型錄網的建立是乙個cruntimeclass鏈,而建立的過程是有afx_的建構函式完成的。

MFC學習筆記(一)

案例1 響應視窗始終 輸出字元 如下 crect rectclient,recttitle int nwidth 100 int nheight 40 getclientrect rectclient 得到當前客戶區的尺寸 recttitle.left rectclient.width nwidth...

MFC學習筆記CDocTemplate 一

修改cdoctemplate可過濾的檔案型別 方法一 在建立工程的時候,第4步時選擇 高階.選項,在副檔名處填寫要過濾的副檔名。方法二 如果工程已經建立好了,那就需要手工修改,找到工程目錄,使用記事本開啟相應的rc檔案,然後找到如下字段 stringtable preload discardable...

MFC入門學習筆記(一)

最近看了一下mfc,隨手記錄下點東西,算是留著給自己偶爾看看吧 學習環境 vs2017 mfc小專案實戰 1.使用mfc平台新建文件時,可選基本對話方塊 單文件介面 多文件介面 多個頂層文件,一般選擇基本對話方塊或多文件mdi兩者就夠用了。2.檢視從mfc類cview派生。3.mfc提供了使文件與其...