[C++] Text formatieren

Trenox

Cadet 2nd Year
Registriert
Aug. 2006
Beiträge
17
Hallo@all,

ich habe folgendes Problem:

ich möchte einen Text, der in einer MessageBox steht, formatieren, also die Schrifgröße andern, die Schriftart und den Abstand zwischen den einzelnen Buchstaben.

Vielen Dank für eure Hilfe

Trenox
 
Ich bin mir da nicht 100% sicher, aber wenn du die MessageBox aus der Win32-API verwendest, dann geht es wahrscheinlich nicht. Hier werden nur Funktionen aus der User32.dll aufgerufen, nämlich MessageBoxA() für Ansi-Zeichen bzw. MessageBoxW() für Unicode-Nutzung.

Du könntest natürlich auch eine eigenes Fenster anzeigen lassen, bei dem du dann die entsprechenden Sachen einstellst.
 
Nicht jeder verwendet Qt :-).

Und eine Richtextbox in einen Dialog einbauen, das geht auch ohne Qt. Wobei der Ansatz eher aufwendig ist, weil die Ansteuerung der Richtextbox ziemlich fummelig ist. Zumindest wenn man alle Features ausnutzen will.

Die einfachste Vorgehensweise (ohne Verwendung einer Library) dürfte darin bestehen einen eigenen Dialog anzulegen, der exakt so aussieht wie eine MessageBox.

Im WM_PAINT Callback kann man dann so ziemlich alles machen was man will.

D.h. verschiedene Fonts verwenden, verschiedene Farben und auch jeden Buchstaben einzeln zeichnen.

Verwendest Du die MFC oder Win32 API oder ...?

MfG

Arnd
 
Zuletzt bearbeitet:
Arnd schrieb:
Nicht jeder verwendet Qt :-).

Und eine Richtextbox in einen Dialog einbauen, das geht auch ohne Qt. Wobei der Ansatz eher aufwendig ist, weil die Ansteuerung der Richtextbox ziemlich fummelig ist. Zumindest wenn man alle Features ausnutzen will.

Die einfachste Vorgehensweise (ohne Verwendung einer Library) dürfte darin bestehen einen eigenen Dialog anzulegen, der exakt so aussieht wie eine MessageBox.

[...]
mal so ganz nebenbei:

nicht jeder verwendet windows. und erst recht nicht wine ;)

das ist also nur die einfachste vorgehensweise für windows. ob der thread ersteller aber überhaupt windows benutzt war beim besten willen nicht rauszubekommen, genauso wie alles andere, das normalerweise in einen solchen post gehört, gefehlt hat...
 
Ok, ok :-)

Nur waren seine bisherigen Fragen aber bisher Windows basiert.
https://www.computerbase.de/forum/threads/c-std-string-in-cstring-konvertieren.220954/
CString lässt auf die MFC und damit Windows schliessen.

Wobei ich mal vermute das meine Aussage auch für Qt gilt. Die Links die ich oben ansatzweise verfolgt habe, sagen mir das Qt in Bezug auf die MessageBox vom Prinzip her genauso aufgebaut ist wie unter Windows.
D.h für die gewünschte Flexibilität ist Selbermachen angesagt.

In MFC heisst das einen CDialog anlegen der vom Aussehen her genauso aussieht wie die Messagebox.
Im OnPaint des Dialoges kann man dann ausgeben was man will. Als Stichworte für die Hilfe mal:

- CFont, CreateFont
- CPaintDC, CDC, CClientDC
- SelectObject
- DrawString

D.h. im OnInitDialog wird der Font mit CreateFont angelegt. Löschen im OnDestroy nicht vergessen.
Im OnPaint wird dc.SelectObject( mpFont ) der Font selektiert. Ebenso den alten Font restaurieren nicht vergessen.
Die Textfarbe kann mit SetTextColor gesetzt werden. Der Text an sich wird z.B. mit DrawString gezeichnet.

Den Zeichenbereich kann man sich mit einem Frame Control markieren.
Die Koordinaten dazu bekommt dann mit mFrameControl.GetWindowRect( &lRect ); ScreenToClient( &lRect );
Oder eben auf Grundlage der Dialoggrösse selber berechnen.

Den Dialog an sich bringst Du dann mit DoModal auf den Bildschirm, dann verhält er sich genauso wie die Standard Messagebox.

Ich hoffe mit den Stichworten kommst Du weiter.

MfG

Arnd
 
Zuletzt bearbeitet:
vielen dank ich werde das mal ausprobieren...

Trenox

PS:ja ich benutze Windows XP homeversion ;)
 
@Trenox
Dann hast du jetzt hoffentlich bemerkt, wie wichtig es ist schon in der Frage zu erwähnen, welches Betriebsystem und welches Toolkit (MFC, Win32 API, Qt, usw.) du benutzt.
Dann müssen wir nämlich nicht raten ;).
 
Zurück
Oben