我們的開發(fā)平臺(tái)需要用第三方控件(ActiveX)時(shí),一般采用的方法是,先在VC中的插入控件,VC會(huì)自動(dòng)生成操作控件的類,然后創(chuàng)建一個(gè)控件,并處理對(duì)應(yīng)的事件。如果控件接口變化,更新控件,需要重復(fù)操作且編譯才能發(fā)布,比較麻煩。顯然,動(dòng)態(tài)加載ActiveX控件能解決這個(gè)問題。如果做過頁(yè)面編程就會(huì)知道,頁(yè)面腳本里邊可以動(dòng)態(tài)創(chuàng)建控件的。我們的開發(fā)平臺(tái)是否也能動(dòng)態(tài)創(chuàng)建控件呢,答案是肯定的。下面介紹一下如何動(dòng)態(tài)加載ActiveX控件:
1.首先是獲取到控件的GUID,可以通過配置。
2.獲取控件的方法、事件等屬性,方便后面的事件處理
3.采用CWnd::CreateControl創(chuàng)建控件實(shí)例,如果是通過腳本調(diào)用控件接口,可以將該控件添加到腳本引擎。
CreateControl原型如下:
BOOL CreateControl( REFCLSID clsid, LPCTSTR pszWindowName, DWORD dwStyle,
const POINT* ppt, const SIZE* psize, CWnd* pParentWnd, UINT nID,
CFile* pPersist = NULL, BOOL bStorage = FALSE, BSTR bstrLicKey = NULL );

4.處理控件觸發(fā)的事件
重載父窗體的OnCmdMsg函數(shù),處理對(duì)應(yīng)的事件即可,OnCmdMsg原型如下:
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
