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