为什么BTNS_DROPDOWN样式导致整个工具栏向下移动几个像素?

时间:2009-02-10 22:03:35

标签: c++ mfc toolbar

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

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

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

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

如果我将按钮的样式更改为BTNS_BUTTON | BTNS_WHOLEDROPDOWN,那么我没有问题,虽然我也没有分割按钮。

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

2 个答案:

答案 0 :(得分:1)

这个问题确实非常旧,但由于它出现在google结果主题的最顶端,并且为了将来的参考浏览,似乎有一个解决方法(引自{ {3}}):

“不知道为什么,但问题出现的时候 我从头开始设置BTNS_DROPDOWN样式。我是否添加了 按钮没有任何设置为BTNS_DROPWN和下一行I 使用TB_SETBUTTONINFO来改变风格,一切正常。“

答案 1 :(得分:0)

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

希望这有助于任何人仍面临同样的问题。