8

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

为了完成此操作,我创建了按钮,然后调用 ::SendMessage,如下所示:

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

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

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

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

4

2 回答 2

1

好吧,这个问题确实老了,但是由于它出现在有关该主题的谷歌搜索结果的最顶部,并且为了将来参考进一步浏览,似乎有一种解决方法(引自http://www.ureader.com/msg /1484852.aspx):

“不知道为什么,但是当我从一开始就设置 BTNS_DROPDOWN 样式时,问题就出现了。我是否将没有任何设置的按钮添加到 BTNS_DROPWN 并且在下一行中我使用 TB_SETBUTTONINFO 来更改样式,一切工作正常。”

于 2011-03-07T16:17:01.580 回答
1

我们在 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() 函数中,以便在任何自定义工具栏设置结束时使用,这应该允许我们捕捉任何其他有趣的按钮样式调整大小业务。

希望这可以帮助任何仍然面临同样问题的人。

于 2016-01-27T11:20:59.393 回答