2008-09-17 44 views
3

丰富编辑控件的文档确实与其看起来一样糟糕(错误?)?现在我正在手动调用LoadLibrary(“riched20.dll”)以显示Rich Edit Control。 Rich Edit的文档在使用Rich Edit控件的第一个代码示例中很糟糕地演示了这一点。原始Win32中的丰富编辑控件

它谈论调用INITCOMMONCONTROLSEX()添加视觉样式,但并没有提及这标志中传递。

有没有更好的方式来加载了丰富的编辑控制?

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); 

回答

2

使用MFC,RichEdit控件只是工作。

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

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

docs确实表明您正在为Win32编程做正确的事情。

+0

仅适用于unicode应用程序的MSFTEDIT_CLASS? – user16408 2008-09-17 17:28:09

1

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

0

我想你必须在创建任何常用控件之前调用CoInitializeEx。

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

+4

需要CoInitializeEx()来初始化COM。这对于win32通用控件不是必需的。你可能一直在想着InitCommonControlsEx()。 – Ferruccio 2008-09-17 17:26:27

2

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

相关问题