Rich Edit Controls 的文档真的像看起来那么糟糕(错误吗?)?现在,我正在手动调用 LoadLibrary("riched20.dll") 以便显示 Rich Edit 控件。Rich Edit 的文档在使用 Rich Edit 控件的第一个代码示例中没有很好地演示这一点。

它讨论了调用 InitCommonControlsEx() 来添加视觉样式,但没有提及要传入哪些标志。

有没有更好的方法来加载 Rich Edit 控件?

http://msdn.microsoft.com/en-us/library/bb787877(VS.85).aspx

这是我可以编写使其工作的唯一代码:

#include "Richedit.h"
#include "commctrl.h"

INITCOMMONCONTROLSEX icex;
icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
icex.dwICC = ICC_USEREX_CLASSES;  //Could be 0xFFFFFFFF and it still wouldn't work
InitCommonControlsEx(&icex);  //Does nothing for Rich Edit controls

LoadLibrary("riched20.dll");  //Manually?  For real?
hWndRichEdit = CreateWindowEx(
    ES_SUNKEN,
    RICHEDIT_CLASS,
    "",
    WS_BORDER | WS_VISIBLE | WS_CHILD,
    2, 2, 100, 24,
    hWnd, (HMENU) ID_RICH_EDIT, hInst, NULL);
有帮助吗?

解决方案

使用 MFC,RichEdit 控件就可以工作。

使用 InitCommonControlsEx() 加载 - ICC_USEREX_CLASSES 不会加载 RichEdit AFAIK,您不需要它,因为它只加载“标准”公共控件,其中不包括 richedit。显然,您只需要调用它来启用 Windows 中的“视觉样式”,而不是让 RichEdits 工作。

如果您使用的是 2008,则需要包含 Msftedit.dll 并改用 MSFTEDIT_CLASS(MS 有时在向后兼容性方面很糟糕)。

文档 建议您正确地进行 Win32 编程。

其他提示

许多年前,我遇到了同样的问题,是的,答案是手动加载 .dll。据我所知,原因是RichEdit窗口类注册在riched20.dll的DllMain中。

是否没有可以链接到的导入库(可能是 riched20.lib)。然后您就不必在运行时“手动”加载它。这就是所有标准控件的工作原理。创建项目时,VS 会自动添加对 user32.lib 的引用。

我认为在创建任何公共控件之前您必须调用 CoInitializeEx。

不需要 LoadLibrary。如果您链接到正确的 .lib 文件,exe 加载程序将为您处理这些详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top