【问题标题】:CRichEditCtrl from resource loads 1.0 instead of 2.0来自资源的 CRichEditCtrl 加载 1.0 而不是 2.0
【发布时间】:2018-08-11 09:58:21
【问题描述】:

我正在尝试更新我的应用程序以使用 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 时尝试制作一个却失败了——尽管有明确的指示相反。有什么想法吗?

【问题讨论】:

  • 为什么还是 RichEdit 2.0 而不是 one of the newer versions(自 Windows XP 起支持 AFAIK RichEdit 4.1)。
  • 嗯,你说得很好。我不确定 _RICHEDIT_VER 在底层代码中的设置位置(AFAIK 它不在项目中的任何位置)所以我可能必须更改它的那一部分,但值得研究。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-23
    • 2012-03-14
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2023-04-06
    • 2013-12-02
    相关资源
    最近更新 更多