VS2010 C ++ MFC隐藏工具栏

时间:2013-12-11 18:04:20

标签: c++ visual-studio-2010 mfc

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

如果我理解正确,标准工具栏在.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 个答案:

答案 0 :(得分:3)

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

  

ID_VIEW_TOOLBAR打开和关闭工具栏

     

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

     

不建议自定义此命令处理程序。如果要添加其他工具栏,则需要克隆和修改此命令的命令处理程序和update-command UI处理程序。

您的CMainFrame::OnCreate覆盖中已建立连接。它调用m_wndToolBar.CreateEx,省略了最终的可选参数:控件ID AFX_IDW_TOOLBAR。然后它会调用m_wndToolBar.LoadToolBar(IDR_MAINFRAME)。这会构建标识为TOOLBAR的{​​{1}}资源的工具栏。