【问题标题】:Why do I get wrong text size for the toolbar?为什么我的工具栏文本大小错误?
【发布时间】:2009-10-31 03:58:39
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c++ windows winapi toolbar


    【解决方案1】:

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

    【讨论】:

    • 事实证明,发送 WM_GETFONT 获得的正是需要的字体。
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2022-08-12
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多