C++ 为什么BTNS_下拉样式会导致整个工具栏向下移动几个像素?

C++ 为什么BTNS_下拉样式会导致整个工具栏向下移动几个像素?,c++,mfc,toolbar,C++,Mfc,Toolbar,我有一个CToolbar,里面有一个样式为BTN_button | BTN_下拉的按钮。我想让它成为一个分割按钮,因此按钮的左侧是一个按钮,右侧有一个下拉菜单 为了完成此操作,我创建了按钮,然后调用::SendMessage,如下所示: ::SendMessage( hwndForButton, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS ); 这非常有效,可以创建分割按钮,但也会导致工具栏向下移动几个像素。如果我不发送消息,那么我仍然存在问

我有一个CToolbar,里面有一个样式为BTN_button | BTN_下拉的按钮。我想让它成为一个分割按钮,因此按钮的左侧是一个按钮,右侧有一个下拉菜单

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

::SendMessage( hwndForButton, TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS );
这非常有效,可以创建分割按钮,但也会导致工具栏向下移动几个像素。如果我不发送消息,那么我仍然存在问题(并且我不再有拆分按钮)

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

关于这里可能出了什么问题,有什么线索吗?我认为有一个空白应用于BNTS_下拉列表,它导致工具栏向下移动

这个问题确实很老了,但由于它出现在谷歌搜索结果的最顶端,并且为了将来参考浏览,似乎有一个解决方法(引自):

“不知道为什么,但问题是什么时候出现的 我从一开始就设置了BTN_下拉样式。我已经添加了 没有任何设置为BTN_DROPWN和下一行I的按钮
使用TB_SETBUTTONINFO更改样式,一切正常。”

我们在CToolBar扩展上设置BTN_下拉样式时遇到了相同的问题,当DPI缩放超过100%时,这种问题变得更加明显

floyd73的链接似乎被破坏了,但试图通过setbuttoninfo单独设置下拉样式却没有成功

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

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


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

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