MFC:隐藏工具栏按钮

Posted

技术标签:

【中文标题】MFC:隐藏工具栏按钮【英文标题】:MFC: hiding a toolbar button 【发布时间】:2010-09-15 04:00:24 【问题描述】:

我目前通过处理ON_UPDATE_COMMAND_UI 和调用->Enable( TRUE / FALSE ) 来禁用某些按钮。

完全隐藏按钮的最佳方法是什么?

我尝试过使用HideButton,这会使按钮图像不可见,但它仍会占用空间,因此可见按钮之间存在空白区域。

谢谢。

【问题讨论】:

如果你不希望按钮在那里,我不会称之为隐藏,而是你似乎想删除按钮并在一段时间后动态添加它。 【参考方案1】:

如果您想隐藏工具栏特定按钮,请使用此代码。

m_wndToolBar.GetToolBarCtrl().HideButton(ID_TOOLBAR1,TRUE);

这里的 m_wndToolBar 是一个 ToolBar 对象。 ID_TOOLBAR1 是您要隐藏该按钮控件的哪个按钮。

【讨论】:

我只需要手动编辑rc文件来隐藏分隔符。除此之外,这种方法效果很好。【参考方案2】:

尝试在 HideButton() 之后调用toolbar.SendMessage(TB_AUTOSIZE);

我建议在 OnUpdateCommandUI 以外的其他地方显示/隐藏这些按钮,因为这些按钮发生得太频繁并且可能导致闪烁。虽然不是 MFC,但我有一个类似的代码可以工作:

void HideToolbarButton(HWND toolbar, UINT command_id)

    TBBUTTONINFO tbinfo;
    tbinfo.cbSize = sizeof(tbinfo);
    tbinfo.dwMask = TBIF_STATE;
    tbinfo.state  = TBSTATE_HIDDEN;
    SendMessage(toolbar, TB_SETBUTTONINFO, command_id, (LPARAM)&tbinfo );

【讨论】:

toolbar.SendMessage(TB_AUTOSIZE) 隐藏按钮后不会缩小工具栏:(

以上是关于MFC:隐藏工具栏按钮的主要内容,如果未能解决你的问题,请参考以下文章

MFC 在自定义工具栏上添加有下拉菜单的按钮。

MFC中的工具栏隐藏与显示问题。

VS2010 C++ MFC 隐藏工具栏

MFC如何隐藏RibbonBar的QAT QuickAccessToolBar(快速访问工具栏)

更新工具栏按钮状态 MFC

以编程方式从 MFC 工具栏中完全删除按钮