我们的开发平台需要用第三方控件(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);