原始Win32中的Rich Edit Control

时间:2008-09-17 17:07:02

标签: windows winapi richedit

Rich Edit Controls的文档是否真的像看起来一样糟糕(错误?)?现在我手动调用LoadLibrary(“riched20.dll”)以显示Rich Edit Control。 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 个答案:

答案 0 :(得分:2)

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

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

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

docs确实建议你正确地进行Win32编程。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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