我們的開發(fā)平臺需要用第三方控件(ActiveX)時,一般采用的方法是,先在VC中的插入控件,VC會自動生成操作控件的類,然后創(chuàng)建一個控件,并處理對應(yīng)的事件。如果控件接口變化,更新控件,需要重復(fù)操作且編譯才能發(fā)布,比較麻煩。顯然,動態(tài)加載ActiveX控件能解決這個問題。如果做過頁面編程就會知道,頁面腳本里邊可以動態(tài)創(chuàng)建控件的。我們的開發(fā)平臺是否也能動態(tài)創(chuà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ù),處理對應(yīng)的事件即可,OnCmdMsg原型如下:
virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
AFX_CMDHANDLERINFO* pHandlerInfo);
