Question

La documentation de Rich Edit Controls est-elle aussi mauvaise (qu’elle semble)? À l'heure actuelle, j'appelle manuellement LoadLibrary ("riched20.dll") afin d'obtenir l'affichage d'un contrôle d'édition enrichi. La documentation de Rich Edit le montre mal dans le premier exemple de code d'utilisation des contrôles Rich Edit.

Il est question d'appeler InitCommonControlsEx () pour ajouter des styles visuels, mais ne mentionne pas les drapeaux à transmettre.

Existe-t-il un meilleur moyen de charger un contrôle Rich Edit?

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

Voici le seul code que je pourrais écrire pour le faire fonctionner:

#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);
Était-ce utile?

La solution

À l'aide de MFC, les contrôles RichEdit fonctionnent.

Le chargement avec InitCommonControlsEx () - ICC_USEREX_CLASSES ne charge pas RichEdit AFAIK, vous n'en avez pas besoin car il ne concerne que les contrôles communs "standard", qui n'incluent pas richedit. Apparemment, il suffit d'appeler cette option pour activer les "styles visuels" dans Windows et non pour que RichEdits fonctionne.

Si vous utilisez 2008, vous souhaitez inclure Msftedit.dll et utiliser à la place MSFTEDIT_CLASS (MS sont parfois des ordures pour une compatibilité ascendante).

Le docs suggère vous le faites bien pour la programmation Win32.

Autres conseils

Il y a de nombreuses années, j'ai rencontré le même problème et, oui, la réponse a été de charger le fichier .dll manuellement. Autant que je me souvienne, la raison en est que la classe de fenêtre RichEdit est enregistrée dans DllMain de riched20.dll.

N'y a-t-il pas une bibliothèque d'importation (peut-être riched20.lib) à laquelle vous pouvez créer un lien. Ensuite, vous ne devrez pas le charger " manuellement " à l'exécution. C'est ainsi que fonctionnent tous les contrôles standard. VS ajoute automatiquement une référence à user32.lib lorsque vous créez un projet.

Je pense que vous devez appeler CoInitializeEx avant de créer l'un des contrôles communs.

La LoadLibrary n'est pas nécessaire. Si vous créez un lien avec le fichier .lib correct, le chargeur exe s’occupe de ces détails pour vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top