在Win32 GUI应用程序中,我需要确定工具栏按钮上字符串占用的区域宽度,以便相应地调整按钮宽度。工具栏是普通的ToolbarWindow32
窗口类。我使用以下代码:
HDC dc = GetDC( toolbarWindowHandle );
SIZE size;
GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );
对于某些固定字符串(例如“Hello”)size.cx
填充了72但是当我使用按钮上显示的相同字符串制作工具栏的屏幕截图时,我看到该字符串占据了56像素
差异显然取决于系统字体设置。我使用“大字体”,代码获得的值大于屏幕上占用的值。在具有“小字体”的机器上,获得的值较小。
我想如果我在窗口设备上下文中使用GetTextExtentPoint32(),它将返回完全正确的大小。我做错了什么?
答案 0 :(得分: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