Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 原始Win32中的丰富编辑控件_Windows_Winapi_Richedit - Fatal编程技术网

Windows 原始Win32中的丰富编辑控件

Windows 原始Win32中的丰富编辑控件,windows,winapi,richedit,Windows,Winapi,Richedit,富编辑控件的文档是否真的像它看起来那样糟糕(错误?)?现在我正在手动调用LoadLibrary(“riched20.dll”),以便显示一个丰富的编辑控件。Rich Edit的文档在使用Rich Edit控件的第一个代码示例中演示了这一点 它谈到调用InitCommonControlsEx()来添加视觉样式,但没有提到要传入的标志 是否有更好的方法加载丰富的编辑控件 以下是我可以编写的唯一代码: #include "Richedit.h" #include "commctrl.h" INIT

富编辑控件的文档是否真的像它看起来那样糟糕(错误?)?现在我正在手动调用LoadLibrary(“riched20.dll”),以便显示一个丰富的编辑控件。Rich Edit的文档在使用Rich Edit控件的第一个代码示例中演示了这一点

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

是否有更好的方法加载丰富的编辑控件

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

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

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

我认为在创建任何公共控件之前,必须调用CoInitializeEx


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

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

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

如果您使用的是2008,那么您希望包含Msftedit.dll并使用Msftedit_类(对于向后兼容性,MS有时是垃圾)


建议您在Win32编程中正确使用它。

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

CoInitializeEx()需要初始化COM。win32通用控件不需要它。您可能一直在考虑InitCommonControlsEx()。不,您仍然可以将其用于ANSI应用程序,但它确实支持WM_UNICHAR通知,以便在ANSI app.MSFTEDIT_类中向其发送unicode文本。仅适用于unicode应用程序:是。在VC2012 MFC中,如果程序使用_UNICODE编译,则使用MSFTEDIT_类。如果未定义_UNICODE,则使用RICHEDIT_类。不幸的是,Windows SDK现在没有
riched20.lib
。MS声明必须动态加载库。这不是原因(其他静态链接的DLL也在DllMain中注册它们的类)。原因是Microsoft在不同的DLL中提供了不同版本的RichEdit(部分不兼容)。他们希望您手动加载DLL,以便选择所需的确切版本。