【问题标题】:Calculating button size using winapi使用winapi计算按钮大小
【发布时间】:2011-09-08 13:30:32
【问题描述】:

我在工具栏上有按钮,可以有图像或/和下拉菜单,我有以下代码

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

然后我将设置按钮宽度设置为 text_width + image_width, 但在这样的公式中,文本/图像和边框之间的空格被遗漏了,也错过了下拉箭头元素的大小。

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

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

更新:在我看来,无法正确计算按钮,但按钮的 BTNS_AUTOSIZE 标志满足了我的大部分需求

Default button size?

【问题讨论】:

    标签: c++ winapi


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

      有有趣的答案

      既然您提到了,那么在 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/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-31
        • 2020-03-03
        • 1970-01-01
        • 2012-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多