我們的開發平臺需要用第三方控件(ActiveX)時,一般采用的方法是,先在VC中的插入控件,VC會自動生成操作控件的類,然后創建一個控件,并處理對應的事件。如果控件接口變化,更新控件,需要重復操作且編譯才能發布,比較麻煩。顯然,動態加載ActiveX控件能解決這個問題。如果做過頁面編程就會知道,頁面腳本里邊可以動態創建控件的。我們的開發平臺是否也能動態創建控件呢,答案是肯定的。下面介紹一下如何動態加載ActiveX控件:
1.首先是獲取到控件的GUID,可以通過配置。
2.獲取控件的方法、事件等屬性,方便后面的事件處理
3.采用CWnd::CreateControl創建控件實例,如果是通過腳本調用控件接口,可以將該控件添加到腳本引擎。
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.處理控件觸發的事件
重載父窗體的OnCmdMsg函數,處理對應的事件即可,OnCmdMsg原型如下:
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
