5

Rich Edit Controls 的文档是否真的像看起来那样糟糕(错误?)?现在我手动调用 LoadLibrary("riched20.dll") 以显示富编辑控件。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);
4

4 回答 4

2

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

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

如果您使用的是 2008,则需要包含 Msftedit.dll 并改用 MSFTEDIT_CLASS(MS 有时为了向后兼容是垃圾)。

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

于 2008-09-17T17:15:38.883 回答
2

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

于 2008-09-17T17:35:21.520 回答
1

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

于 2008-09-17T17:15:02.567 回答
0

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

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

于 2008-09-17T17:15:26.687 回答