Frage

Ich habe eine Win32-GUI-Anwendung, die GDI häufig nutzt.Es muss Text an bestimmten Koordinaten über eine Bitmap zeichnen und ihn später löschen und durch die ursprüngliche Bitmap ersetzen.

Ich gehe wie folgt vor:

  • Wählen Sie Schriftart (GetStockObject (DEFAULT_GUI_FONT)), Pinsel und andere Dinge im Gerätekontext aus
  • Rufen Sie GetTextExtentPoint32() auf, um die Größe des Texts zu berechnen
  • Da ich nun den Textstartpunkt habe, kann ich das erwartete Textrechteck berechnen und speichern
  • Rufen Sie TextOut() für denselben Gerätekontext mit demselben Startpunkt und demselben Text auf

und später die Bitmap für das Speicherrechteck wiederherstellen.

Es funktioniert einwandfrei, wenn das 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 also später die ursprüngliche Bitmap wiederherstelle, bleiben einige kleine Streifen des Textes an Ort und Stelle und ich habe Artefakte.

Gibt es eine Lösung dafür, ohne ClearType zu deaktivieren?

War es hilfreich?

Lösung

Du könntest es auch versuchen DrawText mit DT_CALCRECT, um die Stringgröße zu berechnen.Vielleicht funktioniert es besser.

Sie können die Zeichenfolge dann auch mit DrawText in ein Rechteck schreiben, dessen Größe der Größe entspricht, die Sie mit DT_CALCRECT erhalten, und der Text wird abgeschnitten, falls er etwas größer ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top