關於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 這裡在建立的時候一定不能少了...