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

Posted

技术标签:

【中文标题】为啥 BTNS_DROPDOWN 样式会导致整个工具栏向下移动几个像素?【英文标题】: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 设置下看起来很有趣。 【参考方案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() 函数中,以便在任何自定义工具栏设置结束时使用,这应该允许我们捕捉任何其他有趣的按钮样式调整大小业务。

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

【讨论】:

以上是关于为啥 BTNS_DROPDOWN 样式会导致整个工具栏向下移动几个像素?的主要内容,如果未能解决你的问题,请参考以下文章

css公共样式能更高效,为啥不抽公共样式呢?

为啥我的 Button 样式对象仅适用于按钮内的文本,而不适用于整个按钮?

为啥过渡框阴影会导致整页重绘?

为啥分叉我的进程会导致文件被无限读取

thinkPHP数据分页,为啥点击分页按钮的时候会把整个模板模板一直重复渲染

样式组件 - 为啥道具位置会影响样式?