代码之家  ›  专栏  ›  技术社区  ›  sharptooth

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

  •  0
  • sharptooth  · 技术社区  · 15 年前

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

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

    对于某些固定字符串(说“你好”)。 size.cx 填充了72,但是当我用按钮上显示的非常相同的字符串对工具栏进行屏幕截图时,我看到该字符串占用了56个像素。

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

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   Rob    15 年前

    工具栏使用的字体不会选择到DC中,因此您需要计算出它使用的字体,创建一个副本,将其选择到DC中,获取大小,然后选择字体(否则可能导致资源泄漏)。您当前将获得我期望的系统字体大小,或任何默认的dc字体。

    您可以尝试通过向工具栏窗口发送wm_GetFont消息来查找使用的字体句柄,但这并不保证返回显示文本时使用的实际字体。这完全取决于工具栏的内部工作方式。

    不过,我很确定Win32工具栏使用菜单字体来呈现按钮文本,这可以使用SystemParameterInfo和非ClientMetrics结构的组合来发现。

    如果我在工作,我会发布一些代码。

    你不喜欢win32吗?

    顺便说一句,我使用了工具栏按钮文本功能,而且从未用这种方式手工调整过按钮的大小。

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