我的工具栏上有按钮,可以有图像或/和下拉菜单,我有以下代码
int text_width = CalcTextWidth(); // this function use GetTextExtentPoint32
int image_width = CalcImageWidth();
然后我将设置按钮宽度设置为text_width + image_width, 但是在这样的公式中,文本/图像和边框之间的空格被遗漏,并且也错过了下拉箭头元素的大小。
在工具栏上计算按钮宽度的正确方法是什么
P.S。 Button_GetIdealSize()
给了我更多宽度,因为它使用了下拉菜单中元素的最大宽度
更新:在我看来,没有办法正确计算按钮,但是按钮的BTNS_AUTOSIZE标志是我需要的大部分内容
答案 0 :(得分: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);
答案 1 :(得分:0)
有一些有用的答案
既然你提到过,在Windows 7中获取下拉宽度的正确方法是什么?到目前为止,我们只需要用常量替换TP_SPLITBUTTONDROPDOWN代码。
Craig Peterson的评论 - 2009年11月11日星期三@ 0:42
我们使用Developer Express的ExpressBars库来获取RegexBuddy和RegexMagic中的工具栏。他们修复了构建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/