如何在 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 No CLR 中访问 Winform ActiveX 控件