CMFCMenuBar 一种 CMFCToolBar 的透明度

发布于 2025-01-06 07:06:06 字数 1192 浏览 3 评论 0原文

我想让 MFC 中的工具栏 (CMFCToolBar) 显示透明,就像 CMFCMenuBar 的默认外观一样。

我正在使用控件样式 TBSTYLE_FLAT | TBSTYLE_TRANSPARENT 创建工具栏时并获得透明背景。但是,我仍然有顶部和底部边框,并且夹具也保持不变。

SetBorders(0,0,0,0) 或删除样式 CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM 不会成功。

使用CCS_NODIVIDER(显然是为了删除 2px 顶部边框)也没有效果。

我可以想象自定义的 CMFCVisualManager 类可能是可行的方法(例如使用 CMFCVisualManager::OnFillBarBackground ),但目前还无法弄清楚这一点。

需要明确的是,这是我当前拥有的代码:

m_wndToolBar.CreateEx(this /*MainFrame*/, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT,
                      WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP)
LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE);
m_wndToolBar.SetPaneStyle(GetPaneStyle() & ~(CBRS_BORDER_TOP    |
                                             CBRS_BORDER_BOTTOM |
                                             CBRS_BORDER_LEFT   |
                                             CBRS_BORDER_RIGHT));
m_wndToolBar.SetBorders(0,0,0,0);

这是我现在所在的位置:

这是我的目标:

< img src="https://i.sstatic.net/eQm5s.png" alt="在此处输入图像描述">

非常感谢任何帮助!

I want to let a Toolbar in MFC (CMFCToolBar) appear transparent just like the default appearence of a CMFCMenuBar.

I'm using the control styles TBSTYLE_FLAT | TBSTYLE_TRANSPARENT when creating the toolbar and do get a transparent background. However, I still have a top and bottom border and the gripper stays the same as well.

SetBorders(0,0,0,0) or removing the styles CBRS_BORDER_TOP | CBRS_BORDER_BOTTOM won't do the trick.

And using CCS_NODIVIDER (for apparently removing the 2px top border) doesn't have an effect either.

I could imagine that a custom CMFCVisualManager class might be the way to go (e.g. playing with CMFCVisualManager::OnFillBarBackground), but couldn't figure anything out yet regarding that.

To be clear, this is the code I currently have:

m_wndToolBar.CreateEx(this /*MainFrame*/, TBSTYLE_FLAT | TBSTYLE_TRANSPARENT,
                      WS_CHILD | WS_VISIBLE | CBRS_ALIGN_TOP)
LoadToolBar(IDR_MY_TOOLBAR, 0, 0, TRUE);
m_wndToolBar.SetPaneStyle(GetPaneStyle() & ~(CBRS_BORDER_TOP    |
                                             CBRS_BORDER_BOTTOM |
                                             CBRS_BORDER_LEFT   |
                                             CBRS_BORDER_RIGHT));
m_wndToolBar.SetBorders(0,0,0,0);

Here's where I am right now:

And this is my goal:

enter image description here

Any help is highly appreciated!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自找没趣 2025-01-13 07:06:06

您是否尝试过调用SetExclusiveRowMode(true)?菜单栏具有独占行模式设置,工具栏默认情况下没有。

Have you tried calling SetExclusiveRowMode(true)? Menu bars have exclusive row mode set, toolbars don't by default.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文