我正在尝试更新我的应用程序以使用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,尽管有相反的明确指示。有任何想法吗?
好吧,我觉得很蠢。有一个脚本作为构建过程的一部分运行以更新某些资源,并且由于某种原因,脚本有时会在调试和发布版本之间混淆,并将发布版本中的资源复制到调试版本中。我不知道为什么会发生这种情况,这是另一天的问题,但结果是我改变的.rc文件正在被另一个替换。
使用更改构建发布版本,然后再次构建调试版本,解决了问题。