【问题标题】:why does the BTNS_DROPDOWN style cause the whole toolbar to move down a couple pixels?为什么 BTNS_DROPDOWN 样式会导致整个工具栏向下移动几个像素?
【发布时间】:2009-02-10 22:03:35
【问题描述】:

我有一个 CToolbar,其中有一个样式为 BTNS_BUTTON|BTNS_DROPDOWN 的按钮。我想让它成为一个拆分按钮,所以按钮的左侧是一个按钮,右侧有一个下拉菜单。

为了完成这个,我创建了按钮,然后像这样调用 ::SendMessage:

::SendMessage( hwndForButton, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS );

这很好用并创建了拆分按钮,但也有向下移动工具栏几个像素的不良影响。如果我不发送消息,那么我仍然有问题(并且我不再有拆分按钮)。

如果我将按钮的样式更改为 BTNS_BUTTON|BTNS_WHOLEDROPDOWN 则没有问题,尽管我也没有拆分按钮。

关于这里可能出现什么问题的任何线索?我认为有一个应用于 BNTS_DROPDOWN 的边距,它导致工具栏向下移动。

【问题讨论】:

  • 你解决过这个问题吗? - 我遇到了完全相同的问题:(
  • 不,从来没有解决过这个问题。我最终只是将窗口移动了几个像素来纠正布局。这不太理想,可能会导致工具栏在高 DPI 设置下看起来很有趣。

标签: c++ mfc toolbar


【解决方案1】:

好吧,这个问题确实非常老了,但由于它出现在该主题的谷歌搜索结果的最顶部,并且为了进一步浏览以供将来参考,似乎有一种解决方法(引用自 @ 987654321@):

“不知道为什么,但问题出现在 我从一开始就设置了 BTNS_DROPDOWN 样式。我有如果添加 没有任何设置为 BTNS_DROPWN 的按钮,在下一行中我 使用 TB_SETBUTTONINFO 更改样式,一切正常。”

【讨论】:

    【解决方案2】:

    我们在 CToolBar 扩展上设置 BTNS_DROPDOWN 样式时遇到了同样的问题,当 DPI 缩放高于 100% 时,这一问题变得更加明显。

    floyd73 的链接好像坏了,但是尝试通过 setbuttoninfo 单独设置下拉样式不起作用。

    我们找到的解决方案是在设置样式后重新缩放工具栏,以使用 SetSizes() 考虑新的按钮大小:

    auto imgList = GetToolBarCtrl().GetImageList();
    if (imgList)
    {
        //Scale toolbar buttons to fit the correct scaled icons
        CSize buttonSize(GetToolBarCtrl().GetButtonSize());
        CSize imageSize;
        ImageList_GetIconSize(imageList, &imageSize.cx, &imageSize.cy);
    
        SetSizes(buttonSize, imageSize);
    }
    

    我们将它嵌入到 NormalSize() 函数中,以便在任何自定义工具栏设置结束时使用,这应该允许我们捕捉任何其他有趣的按钮样式调整大小业务。

    希望这对仍然面临同样问题的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      相关资源
      最近更新 更多