来自资源的CRichEditCtrl加载1.0而不是2.0

时间:2018-03-03 07:24:06

标签: c++ winapi visual-studio-2013 mfc richedit

我正在尝试更新我的应用程序以使用RichEdit 2.0;它永远使用1.0。根据Microsoft文档,我将AfxInitRichEdit()更改为AfxInitRichEdit2(),并将资源文件中的类从RICHEDIT更改为RichEdit20A(这对于此应用程序是正确的)。资源文件中只有一个richedit。

当我尝试对包含此richedit的窗口执行任何操作时,应用程序失败。对话框创建在:: CreateDialogIndirect()内部失败,虽然我在CRichEditCtrl :: Create中放置了断点,并且在我从它派生的类中,但这些断点不会跳闸。

出于沮丧,我尝试再次调用AfxInitRichEdit()并调用AfxInitRichEdit2()。该应用程序有效!我放入的断点做了 - 但仅限于我动态创建的控件,而不是资源文件中的控件。当我运行Active Window Spy时,我发现从资源文件创建的richedit以某种方式有一类RICHEDIT,即使我明确地说RichEdit20A,但动态的RichEdit20A是按预期的。

_RICHEDIT_VER是0x210,我正在使用Visual Studio 2013。

我无法弄清楚为什么CreateDialogIndirect()正在进行RICHEDIT控制 - 或者试图制作一个并且失败,如果我不调用AfxInitRichEdit() - 而不是RichEdit20A,尽管有明确的指示相反的。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

嗯,我觉得很蠢。有一个脚本作为构建过程的一部分运行以更新某些资源,并且由于某种原因,脚本有时会在调试和发布版本之间混淆,并将发布版本中的资源复制到调试版本中。我不知道为什么会发生这种情况,这对另一天来说是一个问题,但结果是我改变的.rc文件被另一个替换了。

使用更改构建发布版本,然后再次构建调试版本,解决了这个问题。