Ich habe eine Win32-GUI-Anwendung, die GDI havily verwendet. Es muss an bestimmten Koordinaten Text über eine Bitmap gezeichnet und später gelöscht und durch die Original-Bitmap ersetzt werden.Wie erhalten Sie echte Textdimensionen, wenn ClearType aktiviert ist?
I wie folgt vorgehen:
- Schriftart auswählen (GetStockObject (DEFAULT_GUI_FONT)), Pinsel, andere Dinge in den Gerätekontext
- Anruf GetTextExtentPoint32(), um die Größe des Textes
- nun zu berechnen mit dem Text Startpunkt kann ich das erwartete Text Rechteck berechnen und speichern
- Aufruf von TextOut() für den gleichen Gerätekontext mit dem gleichen Startpunkt und dem gleichen Text
und später die Bitmap für das Speicherrechteck wiederherstellen.
Es funktioniert einwandfrei, wenn ClearType-Antialiasing deaktiviert ist. Aber mit ClearType ist die von GetTextExtentPoint32() zurückgegebene Größe etwas kleiner als die tatsächlich vom Text belegte Größe, wenn TextOut() aufgerufen wird. Wenn ich die ursprüngliche Bitmap später wieder herstelle, bleiben einige kleine Streifen des Textes bestehen und ich habe Artefakte.
Gibt es eine Abhilfe, ohne ClearType zu deaktivieren?
Mit DrawText zweimal - zuerst für die Größenberechnung, dann für das Zeichnen funktioniert gut, der Text wird nicht breiter. Vielen Dank. – sharptooth
Der Nachteil ist, dass DrawText nur Schriften mit Null-Hemmung und Orientierung unterstützt. – sharptooth