如何在 MFC 对话框中替换/更新 ActiveX 控件

Posted

技术标签:

【中文标题】如何在 MFC 对话框中替换/更新 ActiveX 控件【英文标题】:How to replace/update an ActiveX control in a MFC dialog 【发布时间】:2013-10-01 12:46:51 【问题描述】:

我在 VS 2003 中构建了一个较旧的 MFC 项目,我想移植到 VS 2010。该项目使用 ActiveX 网格控件,即组件一中的 VSFlexGrid7。问题是,这个版本的 ActiveX 控件在 Windows 7 中不起作用(这是我所拥有的)。有一个更新版本的网格,即 VSFlexGrid8,它应该与 Windows 7 兼容。

解决方案是用较新的控件替换所有旧控件。

我的问题是,在不触及项目其他部分的情况下,更换控件的步骤是什么。完成此任务的最简单方法是什么?我是否必须修改类、资源 ID 等?

[解决方法:替换 .RC 文件中的 CLSID]

【问题讨论】:

【参考方案1】:

ActiveX 控件通过代表控件的 guid 绑定到资源文件。如果您要查看 .rc 文件,您将看到带有相关 guid 的控件。在您的情况下,最好从对话框中完全删除控件(使用资源编辑器),假设您可以将较新的版本拖到同一个对话框中。完成后,您需要为控件生成一个新的类包装器。类向导应该能够为您处理。获得表示控件的新类包装器后,您需要替换源代码中的先前包装器类。

【讨论】:

【参考方案2】:

通常,控件是使用 CreateInstance 在对话代码中的某处创建的。 如果接口兼容(我假设是),您只需更改 CreateInstance 代码中使用的名称或 GUID。

【讨论】:

我的代码中没有 CreateInstance。我猜 MFC 在第一次通过调用 OnInitDialog() 函数创建对话框时会处理这个问题。 这个组件是如何创建的?您是否将其拖到对话框资源上。 Afaik 在这种情况下,此组件的 GUID 位于资源脚本中。 是的,它是通过将 ActiveX 控件添加到对话框资源中创建的。我将尝试更改 .RC 文件中的 ID,看看它是如何工作的。 如何更改现有activeX的class id?

以上是关于如何在 MFC 对话框中替换/更新 ActiveX 控件的主要内容,如果未能解决你的问题,请参考以下文章

如何访问 MFC 中的 activex 控件?

如何从 mfc dll 加载 ActiveX dll

如何在 MFC No CLR 中访问 Winform ActiveX 控件

我可以编辑具有 x64 ActiveX 控件的 MFC 对话框吗?

MFC ActiveX 击键

MFC设计器中的“无法访问ActiveX控件类型库”错误