В приложении Win32 GUI мне нужно определить ширину области, занимаемой строкой на панели инструментов, чтобы я соответствующим образом менял ширину кнопки. Панель инструментов проста в старом классе ToolbarWindow32
. Я использую следующий код:Зачем мне неправильный размер текста для панели инструментов?
HDC dc = GetDC(toolbarWindowHandle);
SIZE size;
GetTextExtentPoint32(dc, stringToMeasure, tcslen(stringToMeasure), &size);
Для некоторой фиксированной строки (скажем, «Hello») size.cx
заполненная сказать 72, но когда я сделать скриншот панели с той же самой строкой отображается на кнопке, я вижу, что строка занимает 56 пикселей.
Разница явно зависит от настроек системных шрифтов. Я использую «большие шрифты», а значение, полученное кодом, больше, чем занято на экране. На машинах с «маленькими шрифтами» полученное значение меньше.
Я думал, что если использовать контекст оконного устройства GetTextExtentPoint32(), он вернет точно правильный размер. Что я делаю не так?
Оказывается, отправка WM_GETFONT получает точно необходимый шрифт. – sharptooth