Как получить реальные размеры текста при включенном ClearType? - PullRequest
4 голосов
/ 11 августа 2009

У меня есть приложение Win32 GUI, которое использует GDI. Необходимо нарисовать текст поверх растрового изображения в указанных координатах, а затем стереть его и заменить исходным растровым изображением.

Я действую следующим образом:

  • выберите шрифт (GetStockObject (DEFAULT_GUI_FONT)), кисти, другие элементы в контексте устройства
  • вызовите GetTextExtentPoint32 (), чтобы вычислить размер текста
  • теперь, имея начальную точку текста, я могу вычислить ожидаемый текстовый прямоугольник и сохранить его
  • вызов TextOut () для того же контекста устройства с той же начальной точкой и тем же текстом

и позже восстановить растровое изображение для прямоугольника магазина.

Отлично работает, когда сглаживание ClearType выключено. Но с ClearType размер, возвращаемый GetTextExtentPoint32 (), немного меньше размера, фактически занятого текстом при вызове TextOut (). Поэтому при последующем восстановлении исходного растрового изображения остаются небольшие полоски текста, и у меня появляются артефакты.

Есть ли какое-нибудь лекарство от этого без отключения ClearType?

1 Ответ

2 голосов
/ 11 августа 2009

Вы также можете попробовать DrawText с DT_CALCRECT, чтобы вычислить размер строки. Может быть, это работает лучше.

Также вы можете написать строку с DrawText внутри прямоугольника с размерами, равными размеру, который вы получите с DT_CALCRECT, и он обрезает текст, если он немного больше.

...