Я пытаюсь использовать 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