WinAPI: "SetDlgItemText" Textattribute?

Gast #2177663
Lesenswert?

Ich schreibe einen Text mit Hilfe von "SetDlgItemText" in das Textfeld 
einer DIalogbox. Wie kann ich Attribute wie z.B. Fett, oder eine andere 
Farbe in dem Text realisieren, um bestimmte Schlüsselwörter aus dem Text 
hervorheben?

Besispiel:
Diese Wort ist fett!

WinXP; VisualC6.0; WinAPI
Persönliche Seite #2177683
Lesenswert?

Gar nicht. Die Textfelder, deren Text mit SetDlgItemText gesetzt werden 
können (statische und einfache Editfelder) unterstützen keine 
unterschiedlichen Textattribute für einzelne Textbestandteile.
Sie können nur den gesamten Text einheitlich formatiert darstellen.

Für Deine Hervorhebungen ist entweder ein RichText-Control zu verwenden 
(RichEdit), das Text im RTF-Format anzeigt, oder aber ein HTML-Control, 
das Du Dir aber irgendwoher besorgen musst.

Alternativ kannst Du ein OwnerDraw -Control verwenden, also ein 
Textcontrol, bei dem Du den WM_PAINT-Handler mit eigenem Code 
überlagerst.
Gast #2177708
Lesenswert?

Oh je, dass hab ich befürchtet. Großen Aufwand wollte ich an der Stelle 
eigendlich nicht betreiben. Ich dachte so was wie "fett" oder 
"unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu 
machen.

Trotzdem danke.
Wenn einer doch noch ne einfache Method kennt, dann immer her damit ;-)
Persönliche Seite #2177719
Lesenswert?

mitleser schrieb:
> Ich dachte so was wie "fett" oder
> "unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu
> machen.

Wenn Du das standardmäßig verfügbare RichEdit-Control benutzt, dann ist 
das so (auch wenn die Steuerzeichen etwas anders aussehen), nur ist das 
Control mit anderen Funktionen zu verwenden als die einfachen 
Text-Controls.

Die MFC enthält mit CRichEditCtrl auch eine Klasse, die das Control 
kapselt, hier ein einfaches Tutorial dazu:

http://www.functionx.com/visualc/controls/richedit.htm
#2177850
Lesenswert?

mitleser schrieb:
> Oh je, dass hab ich befürchtet. Großen Aufwand wollte ich an der Stelle
> eigendlich nicht betreiben. Ich dachte so was wie "fett" oder
> "unterstreichen" ist vlt. mit Steuerzeichen (ähnlich wie -> \r\n) zu
> machen.
>
> Trotzdem danke.
> Wenn einer doch noch ne einfache Method kennt, dann immer her damit ;-)

Außer RichEdit bleibt auch die Möglichkeit (unter Umgehung von 
SetDlgItemText) den Text einfach per TextOut() an eine beliebige Stelle 
in den Dialog zu schreiben. Per SelectObject() den entsprechenden font 
in den Devicekontext wählen.

"The TextOut function writes a character string at the specified 
location, using the currently selected font, background color, and text 
color."

Vielleicht nicht der Königsweg, aber eine Möglichkeit.
#2177869
Lesenswert?

Peter II schrieb:
> Platinenschwenker .. schrieb:
>> Vielleicht nicht der Königsweg, aber eine Möglichkeit.
>
> offentlich schiebt dann keiner mal ein Fenster über den Text.

Das macht gar nix, TextOut() wird in einer

BeginPaint(hDlg, &ps);
  TextOut(hdc, 0, 0, chText, lstrlen(chText));
EndPaint(hDlg, &ps);

ausgeführt.   (innerhalb eines WM_PAINT: Ereignisses)
#2178173
Lesenswert?

Ist trotzdem keine so gute Idee.
Ich ärgere mich jedesmal grün und blau, wenn jemend so etwas macht und 
ich den Text (die Ausgabe des Programms) dann fein säuberlich abtippen 
muss, anstelle das ich ganz einfach in das Control hineinklicken und mir 
den Text mit Copy&Paste woanders hin kopieren kann.
Programmausgaben gehören im Regelfall in ein Read-Only Control 
ausgegeben. Du weißt nie, was dein Benutzer mit der Programmausgabe 
weiter machen möchte, also mach es ihm leicht das zu tun, was er tun 
will.
#2178185
Lesenswert?

Rufus Τ. Firefly schrieb:
> Karl Heinz Buchegger schrieb:
>> anstelle das ich ganz einfach in das Control hineinklicken und mir
>> den Text mit Copy&Paste woanders hin kopieren kann
>
> Das ist bei einfachen static-Text-Controls leider nicht anders.

:-)
erwischt. An die hatte ich nicht gedacht. Ich hatte Text-Controls im 
Read-Only Modus im Sinn, weil ich die grundsätzlich für Ausgaben von 
berechneten Werten oder sonstigen Angaben nutze. Hat dann auch den 
Vorteil, dass man einen langen Dateinamen in einem kleinen Dialog immer 
noch durchscrollen kann, anstatt dass der über die Dialoggrenzen hinweg 
(unsichtbar) ausgegeben wird.
#2178560
Lesenswert?

Karl Heinz Buchegger schrieb:
> erwischt. An die hatte ich nicht gedacht. Ich hatte Text-Controls im
> Read-Only Modus im Sinn, weil ich die grundsätzlich für Ausgaben von
> berechneten Werten oder sonstigen Angaben nutze. Hat dann auch den
> Vorteil, dass man einen langen Dateinamen in einem kleinen Dialog immer
> noch durchscrollen kann, anstatt dass der über die Dialoggrenzen hinweg
> (unsichtbar) ausgegeben wird.

Dann könnte dir jenes besser gefallen, was im Anhang zu sehen ist. Ein 
read-only RichEdit Textfeld nach dem Start beschickt mit einem String, 
eine Formatierung an das Feld gesendet (rot, blau) und trotz dessen dass 
das Feld zu kurz ist lässt sich der Inhalt scrollen, selektieren, 
kopieren (mit CTRL-C). Doch irgendwie flexibler wie Textout(). ;)

Das Originalbeispiel lud einen "Wordpad" RTF Text in das Feld.
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren