首页 文章

为什么工具栏的文本大小错误?

提问于
浏览
0

在Win32 GUI应用程序中,我需要确定工具栏按钮上字符串占用的区域宽度,以便相应地调整按钮宽度 . 工具栏很简单 ToolbarWindow32 windows类 . 我使用以下代码:

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

对于一些固定的字符串(比如说"Hello") size.cx 充满了72但是当我用一个按钮上显示的相同字符串制作工具栏的屏幕截图时,我看到字符串占据了56像素 .

差异显然取决于系统字体设置 . 我使用“大字体”,代码获得的值大于屏幕上占用的值 . 在具有“小字体”的机器上,获得的值较小 .

我想如果我在窗口设备上下文中使用GetTextExtentPoint32(),它将返回完全正确的大小 . 我究竟做错了什么?

1 回答

  • 3

    工具栏使用的字体将不会被选中到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

相关问题