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

问题描述 投票:0回答:1

我正在尝试更新我的应用程序以使用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,尽管有相反的明确指示。有任何想法吗?

c++ winapi visual-studio-2013 mfc richedit
1个回答
3
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.