首页 / 知识

关于windows:Rich Edit Control in raw Win32

2023-04-16 17:16:00

关于windows:Rich Edit Control in raw Win32

Rich Edit Control in raw Win32

Rich Edit Controls 的文档真的像看起来那样糟糕(错误?)吗?现在我手动调用 LoadLibrary("riched20.dll") 以显示富编辑控件。 Rich Edit 的文档在第一个使用 Rich Edit 控件的代码示例中未能很好地说明这一点。

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

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

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

这是我可以编写的唯一代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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);

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


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

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

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

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


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


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

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


控件文档错误显示

最新内容

相关内容

猜你喜欢