關於MFC中的動態物件建立

2021-03-31 13:50:20 字數 1289 閱讀 1999

關於mfc中的物件動態建立

在mfc中,物件的動態建立也要依賴於rtti所建立起來的類別型錄,和動態建立有關的cruntimeclass成員有兩個:

cobject* (pascal* m_pfncreateobject)(); // 指向用於建立物件的函式

cobject* createobject(); // 利用m_pfncreateobject建立物件

利用rtti建立的類別型錄,declare_dyncreate / implement_dyncreate繼續為類新增了動態建立的功能。

#define declare_dyncreate (class_name) /

declare_dynamic (class_name) /

static cobject* pascal createobject();

這個巨集同樣用在類宣告中,它不但為類新增了class##class_name物件和getruntimeclass(),還為類加入了乙個靜態函式createobject,用來進行物件的動態建立。同樣implement_dyncreate用來對上面新增的內容作定義和初始化工作。

#define implement_dyncreate (class_name, base_class_name) /

cobject* pascal class_name::createobject() /

/implement_runtimeclass (class_name, base_class_name, 0xffff, /

class_name::createobject, null)

和implement_dynamic不同的是,這裡的implement_runtimeclass中的第4個引數並不為null,而是class_name::createobject,這樣就指定了用於建立物件的函式,至於其它的內容,與rtti沒有什麼不同。

於是,整個物件的動態建立過程就變得非常簡單了,只要我們找到某個特定類的cruntimeclass物件,利用class##class_name.createobject()就可以了。

cobject* cruntimeclass::createobject()

下面是整個流程

在類宣告中使用declare_dynamic

在類定義檔案中使用implement_dynamic,此時

class##class_name.m_pfncreateobject = class_name::createobject;

cruntimeclass::createobject利用m_pfncreateobject就可以進行物件的動態建立了

MFC動態建立物件

define implement dyncreate class name,base class name cobject pascal class name createobject implement runtimeclass class name,base class name,0xffff,...

MFC中的動態建立

1 為了能夠動態建立,程式必須維護乙個cruntimeclass的類,當需要去識別乙個類的時候,就依次去查詢這個鍊錶,而這個是通過一組巨集來實現的。因為是乙個鍊錶,所以就需要初始化,這個初始化在cobject中用稍有不同的巨集來實現的。2 cruntimeclass的結構 lpcstr m lpsz...

MFC 動態建立Picture Control

1.首先定義乙個靜態的cstatic 的指標 cstatic ppicturecontrol null ppicturecontrol create t ws child ws visible ss bitmap,crect 20,10,80,40 this,12345 這裡在建立的時候一定不能少了...