为啥 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 样式会导致整个工具栏向下移动几个像素?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Button 样式对象仅适用于按钮内的文本,而不适用于整个按钮?