Domanda

La documentazione per Rich Edit Controls è davvero così pessima (sbagliata?) come sembra?In questo momento sto chiamando manualmente LoadLibrary("riched20.dll") per visualizzare un controllo Rich Edit.La documentazione di Rich Edit lo dimostra scarsamente nel primo esempio di codice per l'utilizzo dei controlli Rich Edit.

Si parla di chiamare InitCommonControlsEx() per aggiungere stili visivi, ma non si fa menzione di quali flag passare.

Esiste un modo migliore per caricare un controllo Rich Edit?

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

Ecco l'unico codice che potrei scrivere per farlo funzionare:

#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);
È stato utile?

Soluzione

Utilizzando MFC, i controlli RichEdit funzionano e basta.

Caricamento con InitCommonControlsEx() - ICC_USEREX_CLASSES non carica RichEdit AFAIK, non ti serve poiché esegue solo i controlli comuni "standard", che non includono richedit.Apparentemente devi solo chiamarlo per abilitare gli "stili visivi" in Windows, non per far funzionare RichEdits.

Se utilizzi la versione 2008, desideri includere Msftedit.dll e utilizzare invece MSFTEDIT_CLASS (a volte i sistemi MS sono spazzatura per la compatibilità con le versioni precedenti).

IL documenti suggerisco di farlo bene per la programmazione Win32.

Altri suggerimenti

Molti anni fa, ho riscontrato lo stesso problema e sì, la risposta era caricare manualmente il file .dll.Il motivo, per quanto posso ricordare, è che la classe della finestra RichEdit è registrata in DllMain di riched20.dll.

Non esiste una libreria di importazione (forse riched20.lib) a cui puoi collegarti.Quindi non dovrai caricarlo "manualmente" in fase di esecuzione.Ecco come funzionano tutti i controlli standard.VS aggiunge automaticamente un riferimento a user32.lib quando crei un progetto.

Penso che devi chiamare CoInitializeEx prima di creare uno qualsiasi dei controlli comuni.

La LoadLibrary non è necessaria.Se ti colleghi al file .lib corretto, il caricatore exe si prenderà cura di tali dettagli per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top