VS2010 C++ MFC 隐藏工具栏

Posted

技术标签:

【中文标题】VS2010 C++ MFC 隐藏工具栏【英文标题】:VS2010 C++ MFC Hide Toolbar 【发布时间】:2013-12-11 18:04:19 【问题描述】:

我无法理解视图菜单如何在代码方面关闭标准工具栏。

如果我理解正确的话,标准工具栏在.rc文件中定义如下:

IDR_MAINFRAME TOOLBAR 16, 15
BEGIN
    BUTTON      ID_FILE_NEW
    BUTTON      ID_FILE_OPEN
    BUTTON      ID_FILE_SAVE
    SEPARATOR
    BUTTON      ID_EDIT_CUT
    BUTTON      ID_EDIT_COPY
    BUTTON      ID_EDIT_PASTE
    SEPARATOR
    BUTTON      ID_FILE_PRINT
    BUTTON      ID_APP_ABOUT
END

类似地,允许您打开和关闭标准工具栏的视图菜单定义如下:

IDR_MAINFRAME MENU
BEGIN
    POPUP "&File"
    BEGIN
        MENUITEM "&New\tCtrl+N",                ID_FILE_NEW
        MENUITEM "&Open...\tCtrl+O",            ID_FILE_OPEN
        MENUITEM "&Close",                      ID_FILE_CLOSE
        MENUITEM SEPARATOR
        MENUITEM "P&rint Setup...",             ID_FILE_PRINT_SETUP
        MENUITEM SEPARATOR
        MENUITEM "Recent File",                 ID_FILE_MRU_FILE1,GRAYED
        MENUITEM SEPARATOR
        MENUITEM "E&xit",                       ID_APP_EXIT
    END
    POPUP "&View"
    BEGIN
        POPUP "&Toolbars and Docking Windows"
        BEGIN
            MENUITEM "<placeholder>",           ID_VIEW_TOOLBAR
        END
        MENUITEM "&Status Bar",                 ID_VIEW_STATUS_BAR
        POPUP "&Application Look"
        BEGIN
            MENUITEM "Windows &2000",           ID_VIEW_APPLOOK_WIN_2000
            MENUITEM "Office &XP",              ID_VIEW_APPLOOK_OFF_XP
            MENUITEM "&Windows XP",             ID_VIEW_APPLOOK_WIN_XP
            MENUITEM "Office 200&3",            ID_VIEW_APPLOOK_OFF_2003
            MENUITEM "Visual Studio 200&5",     ID_VIEW_APPLOOK_VS_2005
            MENUITEM "Visual Studio 200&8",     ID_VIEW_APPLOOK_VS_2008
            POPUP "Office 200&7"
            BEGIN
                MENUITEM "&Blue Style",         ID_VIEW_APPLOOK_OFF_2007_BLUE
                MENUITEM "B&lack Style",        ID_VIEW_APPLOOK_OFF_2007_BLACK
                MENUITEM "&Silver Style",       ID_VIEW_APPLOOK_OFF_2007_SILVER
                MENUITEM "&Aqua Style",         ID_VIEW_APPLOOK_OFF_2007_AQUA
            END
        END
    END
    POPUP "&Help"
    BEGIN
        MENUITEM "&About Emergence...",          ID_APP_ABOUT
    END
END

现在我的理由是......为了使允许您打开和关闭标准工具栏的 MENUITEM 工作,ID_VIEW_TOOLBAR 必须以某种方式引用工具栏定义本身。我已经搜索了整个项目,但找不到 ID_VIEW_TOOLBAR 与标准工具栏定义相关联的位置。当然,必须有某种关系将 ID_VIEW_TOOLBAR 与 IDR_MAINFRAME TOOLBAR 16、15 的定义联系起来才能打开和关闭它?

如果没有,您能否解释一下 ID_VIEW_TOOLBAR 是如何关闭标准工具栏的?

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

ID_VIEW_TOOLBAR 是标准命令 ID。 TN022: Standard Commands Implementation 解释了这些是如何处理的。如果是ID_VIEW_TOOLBAR

ID_VIEW_TOOLBAR 打开和关闭工具栏

CFrameWnd 处理此命令和更新命令 UI 处理程序以切换工具栏的可见状态。工具栏必须是子窗口 ID 为AFX_IDW_TOOLBAR 的框架的子窗口。命令处理程序实际上切换工具栏窗口的可见性。 CFrameWnd::RecalcLayout 用于重绘框架窗口,工具栏处于新状态。 update-command UI 处理程序在工具栏可见时检查菜单项。

不建议自定义此命令处理程序。如果您希望添加其他工具栏,您将需要克隆和修改命令处理程序和此命令的更新命令 UI 处理程序。

连接在您的CMainFrame::OnCreate 覆盖中建立。它调用m_wndToolBar.CreateEx,省略了最后的可选参数:控件IDAFX_IDW_TOOLBAR。然后它继续调用m_wndToolBar.LoadToolBar(IDR_MAINFRAME)。这将从您的 TOOLBAR 资源中构造工具栏,ID 为 IDR_MAINFRAME

【讨论】:

我在想,如果有多个工具栏怎么办?? "如果你想添加额外的工具栏,你需要克隆和修改这个命令的命令处理程序和更新命令 UI 处理程序。"............ .......略过这个......但仍然不确定它是什么意思...... 如果你想添加额外的工具栏,事情就会变得一团糟。换句话说:不要。 ic.....所以如果我理解正确的话,工具栏的定义,即IDR_MAINFRAME TOOLBAR 16、15......纯粹是为了定义工具栏中出现的按钮吗? 资源脚本定义按钮布局及其命令 ID。稍后将命令 ID 分配给工具栏按钮以生成适当的WM_COMMAND 消息。 RT_TOOLBAR 资源类型是私有 MFC 资源类型 - 语法没有正式记录。不过Toolbar Fundamentals 有一些提示。

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

如图,VS2017新建MFC对话框之后,工具箱控件不可用怎么办?

我用VS2010的C++导入ADO导入不了,提示无法打开源文件msado15.tlh

在没有 3rd 方工具/项目的 MFC C++ 版本中查找内存泄漏

如何在 MFC C++ 中为文本添加下划线

MFC:隐藏工具栏按钮

vs2010 MFC中利用CreateWindowEx手动创建工具栏后,想点击这个工具栏上的某个按钮,该如何做?