Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在MFC对话框中替换/更新ActiveX控件_C++_Visual Studio 2010_Mfc_Activex - Fatal编程技术网

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

C++ 如何在MFC对话框中替换/更新ActiveX控件,c++,visual-studio-2010,mfc,activex,C++,Visual Studio 2010,Mfc,Activex,我有一个旧的MFC项目在VS2003中构建,我想移植到VS2010。该项目对网格使用ActiveX控件,即Component One中的VSFlexGrid7。问题是,这个版本的ActiveX控件在Windows7中不起作用(这就是我所拥有的)。有一个较新版本的网格,即VSFlexGrid8,它应该与Windows 7兼容 解决方案是用新的控件替换所有旧的控件 我的问题是,在不涉及项目其他部分的情况下,更换控件的步骤是什么。最简单的方法是什么?我必须修改类、资源ID等吗 [解决方案:替换.RC文

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

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

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


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

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

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

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