使用winapi计算按钮大小
Calculating button size using winapi
工具栏上有一个按钮,可以是图像或/和下拉菜单,我有以下代码
int text_width = CalcTextWidth(); // this function use GetTextExtentPoint32
int image_width = CalcImageWidth();
然后我设置设置按钮宽度为text_width + image_width,但是在这样的公式中,文本/图像和边框之间的空格被忽略了,也忽略了下拉箭头元素的大小。
计算工具栏按钮宽度的正确方法是什么
注:Button_GetIdealSize()
给我的宽度比我需要的要大,因为它使用了下拉菜单中元素的最大宽度
更新:在我看来,没有办法正确地计算按钮,但按钮的BTNS_AUTOSIZE标志使我需要的大部分
默认按钮大小?
可能这就是答案,我没有检查
HTHEME hTheme = NULL;
if(_ThemeHelper::IsAppThemed())
hTheme = _ThemeHelper::OpenThemeData(pInfo->hdr.hwndFrom, L"TOOLBAR");
if (hTheme)
{
CSize size(0, 0);
int state1 = (bHot && bSelected) ? TS_PRESSED : TS_HOT;
_ThemeHelper::GetThemePartSize(hTheme, dc, TP_SPLITBUTTONDROPDOWN, state1, 0, TS_TRUE, &size);
有有趣的答案
既然你提到了,在Windows 7中获得下拉宽度的正确方法是什么?到目前为止,我们只需要用常量替换TP_SPLITBUTTONDROPDOWN代码。
Craig Peterson评论- 2009年11月11日星期三0:42
我们使用Developer Express中的ExpressBars库作为RegexBuddy和RegexMagic中的工具栏。他们在build 47中修复了这个问题。修复是,他们现在使用GetSystemMetrics(SM_CYHSCROLL)来获得下拉按钮的宽度,当操作系统是Windows 7。我不知道这是否与你的代码相关,因为他们一开始就没有使用TP_SPLITBUTTONDROPDOWN。请注意,我讨论的是工具栏上的实际组合框,而不是带有下拉菜单的工具按钮。
Jan Goyvaerts评论- 2009年11月11日星期三@ 9:59
从http://www.micro-isv.asia/2009/11/windows-7-is-to-vista-what-xp-was-to-2000/相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 递归函数计算序列中的平方和(并输出过程)
- (C++)分析树以计算返回错误值的简单算术表达式
- 我的字符计数代码计算错误.为什么
- 在计算中使用二的幂有多有利可图
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何计算文件中的"columns"数?
- 计算排序向量的向量中唯一值的计数
- 如何使用 std::累积在 C++ 中计算总和立方体
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 使用Qt C++计算类似Git的SHA1哈希
- OpenCV C++.快速计算混淆矩阵
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- C++如何计算用户输入的数字中的偶数位数
- 如何计算数据类型的范围,例如int
- 类似枚举的计算常量
- 函数计算用户按下按钮的频率
- 如何停止仍在使用按钮停止计算的功能
- 重置按钮的作用与计算按钮的作用相同
- 使用winapi计算按钮大小