formatage mfc richedit2

J’essaie d’utiliser un contrôle d’édition riche pour afficher du texte à l’écran:

Lundi Appuyez sur 1.
Votre jour est lundi
Mardi Appuyez sur 2.

Je ne trouve pas vraiment d’exemples simples sur la manière de procéder. tout ce que j’ai pu faire, c’est régler le texte de la fenêtre (setWindowText), mais tout le rest m’échappe. Des exemples courts?

Malgré les commentaires, je vais répondre à la question que vous avez posée sur la mise en forme des données dans un contrôle Rich Edit. Il y a quelques années, je devais faire cela et proposer quelque chose que je pourrais traiter un peu comme un IOstream (si je le faisais aujourd’hui, je le ferais probablement un peu différemment, mais telle est la vie).

Tout d’abord, le code doit agir comme un IOstream, mais écrire dans un contrôle Rich-Edit:

 // rich_stream.h: #ifndef RICH_STREAM_H #define RICH_STREAM_H class rich_stream { CRichEditCtrl &ctrl; public: rich_stream(CRichEditCtrl &ctrl_) : ctrl(ctrl_) { } void add_text(char const *txt) { ctrl.SetSel(-1,-1); ctrl.ReplaceSel(txt); } void add_int(int val) { CSsortingng temp; temp.Format("%d", val); add_text(temp); } void set_char_format(CHARFORMAT &fmt) { ctrl.SetSelectionCharFormat(fmt); } }; inline rich_stream &operator<<(rich_stream &s, char const *t) { s.add_text(t); return s; } inline rich_stream &operator<<(rich_stream &s, CHARFORMAT &fmt) { s.set_char_format(fmt); return s; } inline CString nl() { return CString("\n\n"); } inline rich_stream &operator<<(rich_stream &s, CString (*f)()) { s.add_text(f()); return s; } inline rich_stream &operator<<(rich_stream &s, int val) { s.add_int(val); return s; } #endif 

Ensuite, je voudrais utiliser quelque chose comme:

 CHARFORMAT bold; memset(&bold, 0, sizeof(bold)); bold.cbSize = sizeof(bold); bold.dwMask = CFM_BOLD | CFM_FACE | CFM_SIZE; bold.dwEffects = CFE_BOLD; strcpy(bold.szFaceName, "Times"); bold.yHeight = 14 * 20; CHARFORMAT normal; memset(&normal, 0, sizeof(normal)); normal.cbSize = sizeof(normal); normal.dwMask = CFM_BOLD | CFM_FACE | CFM_SIZE; normal.dwEffects = 0; strcpy(normal.szFaceName, "Times"); normal.yHeight = 14 * 20; // ... rich_stream txt(GetRichEditCtrl()); txt << bold << "Heading 1: " << normal << info1 << nl << bold << "Heading 2: " << normal << info2 << nl << bold << "Heading 3: " << normal << info3; 

Si je le faisais aujourd'hui, je créerais certainement une petite classe comme wrapper pour un CHARFORMAT afin de pouvoir construire les objects de mise en forme un peu plus proprement. J'aurais probablement aussi au moins sérieusement réfléchi à l'implémenter comme un iostream normal avec un tampon de stream qui insérait des données dans le contrôle d'édition riche (mais à l'époque je ne connaissais pas suffisamment les stream pour savoir que je devais le faire).

En y jetant un coup d'oeil, il y a quelques autres choses qui ne sont pas vraiment exactes non plus - add_text utilise SetSel(-1, -1); . Cela devrait vraiment récupérer la longueur actuelle du texte (par exemple, avec GetWindowTextLength , et définir la sélection juste après la fin.

Utilisez Wordpad, c’est aussi un contrôle RichEdit. Il générera votre RTF de manière naturellement compatible avec votre contrôle.