系统菜单栏

本文介绍如何使用MFC编程来管理应用程序主菜单的状态,包括如何查找菜单、子菜单,以及如何通过不同函数如CheckMenuItem(), SetDefaultItem(), SetMenuItemBitmaps(), EnableMenuItem()等来控制菜单项的选择状态、默认项、图标和可用性。文章还详细说明了如何禁用自动菜单项管理,以及如何通过消息响应机制更新菜单项的状态。

这里主要是对主菜单状态的编程。

首先,可以在MainFrame的OnCreate函数中。

1、要实现这种编程,首先要找到菜单,CWnd类有GetMenu()这个函数。

2、菜单下可能还有子菜单,CMenu类有GetSubMenu()这个函数。

3、得到菜单后,就可以操作了,CheckMenuItem(),SetDefaultItem(),SetMenuItemBitmaps(),EnableMenuItem()。

*值得注意的是SetMenuItemBitmaps()这个函数需要一个CBitmap*,这个指针的对象跟一个位图资料关联。在关联状态下,如果对象销毁,位图显示不出来。所以,要么CBitmap声明为全局对象,要么取消关联,用Detach()。

*MFC程序会自动管理菜单项的可使用状态,所以在使用EnableMenuItem之前,要先禁用系统的自动管理,m_bAutoMenuEnable这个变量设置为FALSE(可以在构造函数中处理)。VS2008中,MF_DISABLED这个函数同时使其变灰。

 

移除和装载菜单,用CWnd类的SetMenu函数。参数为NULL或CMenu*。这里也要用到Detach。

 

也可以在主框架创建完成后,利用菜单命令更新机制。

菜单项状态的维护依赖于CN_UPDATE_COMMAND_UI消息,可以对这个消息进行捕获并响应。

这是属于事件的,所以在VS2008中事件中为它添加一个消息响应。

*这个方法不仅针对菜单项,相同ID的工具栏项也受到相同影响。

CCmdUI类有m_nIndex和m_nID两个成员函数可以分辨这个消息是从菜单还是工具栏发来的(通过If语句)。

在Linux桌面环境中,“隐藏菜单栏”这个表述有些模糊,因为不同的桌面环境有不同的设置选项,并且“菜单栏”的含义可以指应用程序窗口顶部的功能按钮集合或者是启动器、任务栏等组件。 如果我们讨论的是像GNOME这样的现代桌面环境下应用窗口内的菜单栏自动隐藏功能,通常可以在该程序的视图(View)或工具(Tools)菜单里找到类似"总是显示菜单"(Always Show Menus) 或者 “自动隐藏菜单栏” (Auto-hide the menubar) 的选项来控制其可见性;对于一些其他的应用,则可能是通过右键点击标题栏空白处来进行相关设置调整。 如果是指的任务栏或者面板(panel)之类的全局UI元素想要让它自动隐藏的话,在大多数流行的Linux桌面如 GNOME, KDE Plasma, XFCE 中都存在相应的设置项用于配置此行为: - **GNOME**: 打开“设置(Settings)” -> "外观(Appearance)" ,然后向下滚动到"Dock Behavior", 这里你可以看到 Autohide 的开关。 - **KDE Plasma**: 点击左下角的「开始」按钮打开主菜单,选择「系统设置(System Settings)」-> 「工作区行为(Workspace Behavior)」-> 「活动效果(Activity Effects)」这里有一个叫做 「隐含未使用的面板(Panels)」的选择框。 请注意具体的路径可能会根据版本更新有所变化。如果你能提供更详细的上下文信息关于你想隐藏的具体是什么样的菜单栏将会帮助给出更为准确的回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值