0

在 Win32 GUI 应用程序中,我需要确定工具栏按钮上的字符串占用的区域宽度,以便相应地调整按钮宽度。工具栏是普通的旧ToolbarWindow32windows 类。我使用以下代码:

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

对于某些固定字符串(比如“Hello”)size.cx填充了 72,但是当我制作工具栏的屏幕截图时,按钮上显示的字符串完全相同,我看到该字符串占用了 56 个像素。

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

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

4

1 回答 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

于 2009-10-30T19:58:39.253 回答