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);
答案 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将为你处理这些细节。