Почему я получаю неправильный размер текста для панели инструментов? - PullRequest
0 голосов
/ 30 октября 2009

В приложении Win32 GUI мне нужно определить ширину области, занимаемой строкой на кнопке панели инструментов, чтобы я соответствующим образом отрегулировал ширину кнопки. Панель инструментов старого класса ToolbarWindow32 windows. Я использую следующий код:

 HDC dc = GetDC( toolbarWindowHandle );
 SIZE size;
 GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );

Для некоторой фиксированной строки (скажем «Hello») size.cx заполнен, скажем, 72, но когда я делаю снимок экрана панели инструментов с той же самой строкой, отображаемой на кнопке, я вижу, что строка занимает, скажем, 56 пикселей.

Разница явно зависит от настроек системных шрифтов. Я использую «большие шрифты», и значение, полученное кодом, больше, чем то, что занято на экране. На машинах с «маленькими шрифтами» полученное значение меньше.

Я подумал, что если я использую GetTextExtentPoint32 () в контексте оконного устройства, он вернет точно правильный размер. Что я делаю не так?

1 Ответ

3 голосов
/ 30 октября 2009

Шрифт, используемый панелью инструментов, не будет выбран в DC, поэтому вам необходимо выяснить, какой шрифт он использует, создать копию, выбрать ее в DC, получить размер и затем выбрать шрифт. (иначе вы можете получить утечку ресурсов). В настоящее время вы получите ожидаемый размер системного шрифта или любой другой шрифт DC по умолчанию.

Вы можете попытаться найти используемый дескриптор шрифта, отправив сообщение WM_GETFONT в окно панели инструментов, но это не гарантирует возврата фактического шрифта, используемого при отображении текста. Все зависит от того, как панель инструментов работает внутри.

Однако я почти уверен, что панель инструментов Win32 использует шрифт меню для отображения текста кнопки, который можно обнаружить с помощью комбинации SystemParametersInfo и структуры NONCLIENTMETRICS.

Если бы я был на работе, я бы выложил какой-нибудь код.

Разве вы не просто любите Win32?

Кстати, я использую функцию текста кнопки панели инструментов, и мне никогда не приходилось изменять размер кнопки таким образом.

http://msdn.microsoft.com/en-us/library/ms724947(VS.85).aspx http://msdn.microsoft.com/en-us/library/ms724506(VS.85).asp

...