永发信息网

如何动态加载ActiveX控件

答案:2  悬赏:80  手机版
解决时间 2021-01-26 12:58
  • 提问者网友:寂寞梧桐
  • 2021-01-25 23:49
如何动态加载ActiveX控件
最佳答案
  • 五星知识达人网友:野慌
  • 2021-01-26 00:46
我们的开发平台需要用第三方控件(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);
全部回答
  • 1楼网友:归鹤鸣
  • 2021-01-26 01:19

对于未注册(未引用)的控件:

在运行时添加未引用的控件 您也可以利用 add 方法来动态添加一个在工程中没有被引用的控件。(“未引用的”控件是不出现在 toolbox 中的控件)。为此,您必须也把控件的license 关键字添加到 licenses 集合中。下面的示例中在添加控件本身之前添加了控件的许可证关键字:

option explicit

private sub form_load() licenses.add "prjweeks.weeksctl", "xydsfasfjewfe"   //添加引用,必须。 set extctl = form1.controls.add("prjweeks.weeksctl", "ctl1") extctl.visible = true ' the control is invisible by default. end sub

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯