GetTextExtentPoint32 возвращает неправильную ширину с определенными символами - PullRequest
1 голос
/ 09 июля 2019

Я пытаюсь использовать GetTextExtentPoint32 на C ++, чтобы получить ширину некоторых символов, по одному за раз. Однако функция возвращает неправильные результаты для специальных символов, таких как 0x14, как правило, в два раза меньше их размера, напечатанного на экране с помощью ExtTextOut. Вот пример:

HDC hdc = GetDC(hWnd);    
SelectObject(hdc,font);    
SIZE sz;     
char c=0x14;    
GetTextExtentPoint32(hdc,&c,1,&sz); //function returns sz.cx equal to 3 instead of 6

То же самое происходит с GetCharWidth32:

int result;    
GetCharWidth32(hdc,0x14,0x14,&result); //result equals to 3, while the character on screen is 6px wide

Какие-нибудь подсказки, где моя ошибка? Заранее спасибо.

РЕДАКТИРОВАТЬ: кажется, GetTextExtentPoint32 находит неточные ширины для всех символов ASCII меньше 32. Я обнаружил, что DrawText с флагом DT_CALCRECT прекрасно вычисляет все символы. Единственным недостатком является то, что DrawText потребляет гораздо больше ресурсов процессора, чем GetTextExtentPoint32.

HDC hdc=GetDC(hWnd);
RECT rect;
rect.left=0; rect.top=0;
DrawText(hdc,"\x14",1,&rect,DT_CALCRECT); //rect.right = character width
...