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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了来自资源的CRichEditCtrl加载1.0而不是2.0相关的知识,希望对你有一定的参考价值。

我正在尝试更新我的应用程序以使用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文件正在被另一个替换。

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

以上是关于来自资源的CRichEditCtrl加载1.0而不是2.0的主要内容,如果未能解决你的问题,请参考以下文章

生成 Jekyll Liquid 内容而不包含它(仅来自 JQuery 加载函数)

从 JAR 加载资源而不访问 ClassLoader?

如何处理来自大型 ResultSet 的数据而不将它们全部加载到内存中?

当收到新消息而不重新加载视图时,如何将来自 stomp 客户端的消息显示到视图中

CRichEditCtrl 输入字符串长度限制

如何将 Unicode 支持添加到 CRichEditCtrl?