Frage

Ist die Dokumentation für Rich-Edit-Steuerelemente wirklich so schlimm (falsch?), Wie es zu sein scheint? Im Moment bin ich Aufruf manuell Loadlibrary ( „riched20.dll“), um eine Rich-Edit-Control zu erhalten zu zeigen. Die Dokumentation für Rich Edit zeigt schlecht diese im ersten Codebeispiel für Rich-Edit-Steuerelemente verwendet wird.

Er spricht über InitCommonControlsEx () aufrufen, visuelle Stile hinzufügen, aber nicht die Rede von der Fahnen in zu übergeben.

Gibt es einen besseren Weg, um ein Rich-Edit-Steuerelement zu laden?

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

Hier ist der einzige Code, den ich schreiben könnte, damit es funktioniert:

#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);
War es hilfreich?

Lösung

Mit MFC, RichEdit Kontrollen funktionieren.

Laden mit InitCommonControlsEx () - ICC_USEREX_CLASSES nicht geladen RichEdit AFAIK, Sie brauchen es nicht, da es nur die ‚Standard‘ gemeinsame Kontrollen der Fall ist, die nicht enthalten Richedit. Anscheinend müssen Sie nur nennen die ‚visuelle Stile‘ in Windows zu aktivieren, nicht zu bekommen RichEdits arbeiten.

Wenn Sie 2008 verwenden, möchten Sie Msftedit.dll und verwenden Sie die MSFTEDIT_CLASS statt (MS sind Müll für rückwärts compatibilty manchmal).

enthalten

Die docs schlagen Sie es richtig für Win32-Programmierung zu tun.

Andere Tipps

Vor vielen Jahren, lief ich in das gleiche Problem, und ja, die Antwort war den DLL manuell zu laden. Der Grund, soweit ich mich erinnern kann, ist, dass die RichEdit-Fensterklasse in DllMain von riched20.dll registriert ist.

Gibt es nicht eine Import-Bibliothek (vielleicht riched20.lib), die Sie verknüpfen können. Dann werden Sie es nicht geladen werden müssen „von Hand“ zur Laufzeit. Das ist, wie alle Standard-Kontrollen funktionieren. VS fügt automatisch einen Verweis auf user32.lib wenn Sie ein Projekt erstellen.

Ich glaube, Sie haben CoInitializeEx aufrufen, bevor Sie eine der allgemeinen Steuerelemente erstellen.

Die Loadlibrary ist nicht erforderlich. Wenn Sie mit der richtigen LIB-Datei verknüpfen werden die exe-loader kümmern solche Details für Sie.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top