Как нарисовать выделенный текст в win32, используя только вызов gdi? - PullRequest
0 голосов
/ 03 мая 2009

Я пытался нарисовать выделенный текст, используя два вызова TextOut и флаг TA_UPDATECP, но когда я перемещаю выбранную область, символы немного двигаются.

Кто-нибудь знает правильный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 31 мая 2009

Я считаю, что сглаживание и ClearType могут рисовать текст в долях пикселя. Если вы рисуете строку текста, а затем пытаетесь перерисовать часть середины, у вас не будет способа нарисовать текст, начинающийся точно с той же позиции, что и символы в середине. Хитрость заключается в том, чтобы перерисовать всю строку, но с обтравочной областью для выделенного текста.

В этом руководстве по написанию текстового редактора Win32 подробно рассматриваются способы рисования выделенного текста.

0 голосов
/ 06 мая 2009

В соответствии с документацией MSDN, когда вы установили флаг TA_UPDATECP с помощью SetTextAlign () , TextOut () игнорирует параметры своей позиции в пользу текущей позиции контекста устройства. Не видя ваш код, я подозреваю, что ваш алгоритм рисования вызывает TextOut () с текущей позицией, которая немного отличается в зависимости от выбора.

В качестве стратегии отладки вы можете вызвать GetCurrentPositionEx () непосредственно перед вызовом TextOut (), чтобы получить текущую позицию и убедиться, что она соответствует вашему ожиданию того, где должен быть нарисован текст.

...