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

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

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

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

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

【问题讨论】:

    标签: c++ visual-studio-2010 mfc activex


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我的代码中没有 CreateInstance。我猜 MFC 在第一次通过调用 OnInitDialog() 函数创建对话框时会处理这个问题。
      • 这个组件是如何创建的?您是否将其拖到对话框资源上。 Afaik 在这种情况下,此组件的 GUID 位于资源脚本中。
      • 是的,它是通过将 ActiveX 控件添加到对话框资源中创建的。我将尝试更改 .RC 文件中的 ID,看看它是如何工作的。
      • 如何更改现有activeX的class id?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2019-06-21
      • 2011-02-01
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多