gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:12:36 25 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

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

关于c++ - 为什么工具栏的文本大小错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1650637/

25 4 0
文章推荐: C++ 变量转换
文章推荐: c++ - QTimer 与独立线程
文章推荐: c++ - 组织项目依赖
文章推荐: c++ - 模板特化问题
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com