2011-09-08 23 views
0

我有工具栏上的按钮,其可具有图像和/或下拉菜单,我有以下代码使用WINAPI

int text_width = CalcTextWidth(); // this function use GetTextExtentPoint32 
int image_width = CalcImageWidth(); 

然后I SET设置按钮宽度text_width + IMAGE_WIDTH, 但在计算按钮尺寸这样的公式,文本/图像和边框之间的空格被遗漏,也错过了下拉箭头元素的大小。

什么是计算工具栏上按钮宽度的正确方法

P.S. Button_GetIdealSize()给了我更多的宽度比我更需要,因为它使用元素的最大宽度在下拉菜单中

更新:在我看来,没有办法正确calc下按钮,但BTNS_AUTOSIZE标志按钮,使大多数什么,我需要

Default button size?

+5

你在这里已经2年5个月。有时间了解如何格式化您的帖子。 –

回答

1

可能这就是答案,我没有检查

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); 
0

有野趣的答案

既然你提到它,在Windows 7中获取下拉宽度的正确方法是什么?到目前为止,我们只需用常量替换TP_SPLITBUTTONDROPDOWN代码。

评论克雷格·彼得森 - 周三,2009年11月11日@ 0:42

我们使用来自Developer Express公司的ExpressBars库中使用RegexBuddy和RegexMagic工具栏。他们修复了内部版本47的问题。修复方法是,当操作系统是Windows 7时,他们现在使用GetSystemMetrics(SM_CYHSCROLL)获取下拉按钮宽度。我不知道这是否与你的代码,因为他们并没有首先使用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/