C++ 为什么工具栏的文本大小不对?

C++ 为什么工具栏的文本大小不对?,c++,windows,winapi,toolbar,C++,Windows,Winapi,Toolbar,在Win32 GUI应用程序中,我需要确定工具栏按钮上字符串所占区域的宽度,以便相应地调整按钮宽度。工具栏是纯旧的ToolbarWindow32windows类。我使用以下代码: HDC dc = GetDC( toolbarWindowHandle ); SIZE size; GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size ); 对于某些固定字符串(说“Hello”)size.c

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

 HDC dc = GetDC( toolbarWindowHandle );
 SIZE size;
 GetTextExtentPoint32( dc, stringToMeasure, tcslen(stringToMeasure), &size );
对于某些固定字符串(说“Hello”)
size.cx
填充了say 72,但当我在工具栏上截图时,按钮上显示的字符串非常相同,我看到该字符串占用了56像素

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


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

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

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

但是,我非常确定Win32工具栏使用菜单字体呈现按钮文本,可以使用SystemParametersInfo和NONCLIENTMETRICS结构的组合来发现

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

你不喜欢Win32吗

顺便说一句,我使用工具栏按钮文本功能,从来没有用这种方式手动调整按钮的大小


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

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

但是,我非常确定Win32工具栏使用菜单字体呈现按钮文本,可以使用SystemParametersInfo和NONCLIENTMETRICS结构的组合来发现

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

你不喜欢Win32吗

顺便说一句,我使用工具栏按钮文本功能,从来没有用这种方式手动调整按钮的大小


事实证明,发送WM_GETFONT可以准确地获得所需的字体。事实证明,发送WM_GETFONT可以准确地获得所需的字体。