【发布时间】: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