Schriftart eines RichEdits ändern


  • Mod

    Auch für ein RichEditCtrl muss man ES_MULTILINE angeben!



  • *haarerauf*

    Ich hätte mal im Dialog-Editor nach eben diesen Optionen schauen sollen... vielen Dank!



  • Nun stelle ich fest, dass die Schriftfarbe zunächst invertiert ist, also der Text markiert ist, wenn ich das Tab mit dem RichEdit aktiviere. Fügt er dann neuen Text hinzu, erscheint er in der korrekten Farbe und der Rest am Anfang bleibt in dieser markierten Farbe. Klicke ich dann in den Text ist der gesamte Text wieder normal. In meinem oben genannten Code kann ich nichts finden, dass den ersten Text markiert und damit die Schriftfarbe vorübergehend ändert.



  • Ich hab den Kontrast mal zwischen Text- und Hintergrundfarbe verändert und nun ist es eindeutig: Wenn das RichEdit zum ersten Mal angezeigt wird (wenn ich das Tab aufrufe), wird automatisch der gesamte bisherige Inhalt markiert. Die Frage ist also nur noch, wie verhindere ich dies? Kann ich irgendwie einen Cursor dareinforcieren? SetCaretPos scheint nur Pixeleingaben zu verarbeiten. SetSel(-1,-1) macht auch nichts sichtbares.


  • Mod

    Automatisch macht dies ein Dialog für alle Controls die auf WM_GETDLGCODE ein DLGC_HASSETSEL returnieren.

    Also müsstest Du ein eigenes Fenster von Rich Edit Control ableiten einen Handler für WM_GETDLGCODE überschreiben und DLGC_HASSETSEL nicht returnieren.



  • Ich hab jetzt einige Zeit versucht, Deine Worte zu interpretieren, aber meine Hauptfrage bleibt: Wo genau leite ich was von TRichEditCtrl ab? Das Prinzip verstehe ich, aber nicht, wo ich das machen muss. Muss ich dazu eine neue Klasse schreiben, die von TRichEditCtrl abgeleitet wird, oder schreibe ich alles in mein myDialog4 das das RichEdit enthält?



  • So, habe nun doch etwas probiert: In die h-Datei des Dialogs eine Subclass MyRichEditCtrl erstellt und in der cpp-Datei den dazugehörigen OnGetDlgCode neu definiert und 0 zurückgeben lassen. Das RichEdit-Control ist nun vom Typ MyRichEditCtrl. Er akzeptiert dies alles ohne Fehlermeldungen, bloss ein Problem: Er durchläuft OnGetDlgCode nicht (das MessageBox da drin wird nicht ausgeführt)...


  • Mod

    Wird Dein Control in einr resource erzeugt?
    Wird wirklich ein entsprechender Subclass durchgeführt?
    Hast Du eine Messagemap für Dein neues RTF Control?



  • Ja, wird in einer Ressource erzeugt. Das Subclassing hab ich so gemacht, wie CAboutDlg automatisch mit in den Hauptdialog eingebunden wird. Mit MessageMaps hab ich nichts gemacht, das könnte der Grund sein, wieso die Nachricht nicht empfangen wird. Andererseits wird ja EM_SETSEL empfangen, sonst wäre mein Text ja nicht markiert... hmmmmm



  • Juhu! Es klappt 🙂 Die MessageMaps fehlten 🙂


Anmelden zum Antworten