2011-09-08 54 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/