菜单基本操作小怪兽&奥特曼

本主要介绍菜单的基本使用,在MFC中用于指定菜单项位置有两种方式,它们是MF_BYCOMMAND和MF_BYPOSITION,在菜单操作中经常用到,具体含义如下:

如图1是一个MFC窗口,其中文件、编辑、视图所在的位置是菜单栏,其中“文件(F)”、“编辑(E)”都是子菜单,“新建(N)”,“保存(S)”等是菜单项。菜单项可以通过菜单项的标识ID进行访问,而子菜单只能通过索引号进行访问。

图1MFC窗口

voidDrawMenuBar();

CMenu*GetMenu()const;

CMenu*GetSystemMenu(BOOLbRevert)const;

BOOLHiliteMenuItem(CMenu*pMenu,UINTnIDHiliteItem,UINTnHilite);

BOOLSetMenu(CMenu*pMenu);

CMenu*GetSubMenu(intnPos)const;由于程序的主菜单属于框架窗口,所以需要在框架窗口创建完成之后,再去访问菜单对象,我们可以在框架类的OnCreate函数return之前添加相应的代码,如果在CMainFrame类中没有OnCreate响应函数,需要我们手动添加该函数。

在视图子菜单下面有“工具栏(T)”和"状态栏(S)"两个菜单项,在它们前面都有一个对号(√),我们称这种类型的菜单为“标记菜单”,如图2所示。

图2标记菜单

UINTCheckMenuItem(UINTnIDCheckItem,UINTnCheck);现在我们将“文件(F)”下的“打开(O)”菜单项设置为标记菜单,实现代码如下:

intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...//标记菜单GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_OPEN,MF_BYCOMMAND|MF_CHECKED);return0;}运行效果:

BOOLSetDefaultItem(UINTuItem,BOOLfByPos=FALSE);实现代码如下:

intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...//默认菜单GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_NEW,FALSE);return0;}

运行效果:

BOOLSetMenuItemBitmaps(UINTnPosition,UINTnFlags,constCBitmap*pBmpUnchecked,constCBitmap*pBmpChecked);在图形标记菜单中,显示的位图尺寸有固定的大小,其高度和宽度都是13*13。

代码实现如下:

intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...//图形标记菜单m_BmpItem.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(2,MF_BYPOSITION,&m_BmpItem,&m_BmpItem);return0;}运行效果:

为了达到屏蔽某些菜单功能,我们可以使用EnableMenuItem函数来实现,该函数的功能是设置菜单状态:能够使用、禁用或变灰显示,其函数如下:

UINTEnableMenuItem(UINTnIDEnableItem,UINTnEnable);为了将EnalbeMenuItem函数正常生效,需要在MainFrame构造函数中将m_bAutoEnableMenus设置为False,此时MFC菜单项的显示状态不会自动更新,需要我们自己维护菜单显示状态。

我们将m_bAutoEnableMenu设置为False后,那些没有设置功能的菜单项也都会显示为非灰色,造成误解,为了将某些功能禁用需要调用EnableMenuItem函数,具体代码:

intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...//禁用编辑下的所有菜单项功能CMenu*SubEditMenu=GetMenu()->GetSubMenu(1);SubEditMenu->EnableMenuItem(0,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);SubEditMenu->EnableMenuItem(2,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);SubEditMenu->EnableMenuItem(3,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);SubEditMenu->EnableMenuItem(4,MF_BYPOSITION|MF_DISABLED|MF_GRAYED);return0;}运行效果:

在程序中,如果希望移除一个菜单的话或同时加载一个新的菜单可以利用Cwnd类提供的setMenu函数来实现。移除和装载一个菜单代码实现如下:

intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...//默认的菜单栏从窗口中移除SetMenu(NULL);//设置新的菜单栏CMenumenu;menu.LoadMenu(IDR_MENU_TEST);//自定义的菜单栏//将自定义菜单栏绑定到窗口SetMenu(&menu);//将menu对象中的m_hMenu和菜单栏资源分离,//避免menu对象析构时,菜单栏资源也被析构menu.Detach();/*HMENUCMenu::Detach(){HMENUh=m_hMenu;m_hMenu=NULL;returnh;}*/return0;}运行效果:

BOOLTrackPopupMenu(UINTnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=NULL);

具体代码如下:

voidCCMenuView::OnContextMenu(CWnd*/*pWnd*/,CPointpoint){//TODO:在此处添加消息处理程序代码CMenumenu;VERIFY(menu.LoadMenu(IDR_MENU_RBUTTON));CMenu*pPopup=menu.GetSubMenu(0);pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);}

方式二:

voidCCMenuView::OnRButtonDown(UINTnFlags,CPointpoint){//TODO:在此添加消息处理程序代码和/或调用默认值//该消息响应函数需要将转换鼠标点击坐标ClientToScreen(&point);CMenumenu;VERIFY(menu.LoadMenu(IDR_MENU_RBUTTON));CMenu*pPopup=menu.GetSubMenu(0);pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);CView::OnRButtonDown(nFlags,point);}

THE END
1.菜单本菜单本品牌/图片/价格菜单本批发找菜单本,上阿里巴巴1688.com,全球领先采购批发平台,阿里巴巴为你找到1,430条菜单本优质商品,包括品牌,价格,图片,厂家,产地,材料等,海量菜单本,供您挑选,阿里巴巴批发采购一站式全程服务,让生意变的温馨放心。https://s.1688.com/kq/-B2CBB5A5B1BE.html
2.记事本++(可以输入文字改变字体窗口重绘不消失)(含代码)资源1、使用vs2010,不用经典菜单栏工具栏,使用MFC向导默认配置,根据当前字体完美动态标记菜单项。 2、完美窗口重绘。 3、根据当前字体改变位图插入符图形。 4、响应LButtonDown、RButtonUp、MouseWheel消息。分别为修改插入符位置,右键菜单、调整缩放。 5、添加了一些菜单项,删除了一些菜单项。注意,该工程为vs2010创建,https://download.csdn.net/download/xuanxiao12345/5045907
3.点餐本品牌及商品京东是国内专业的点餐本网上购物商城,本频道提供点餐本哪个牌子好、点餐本图片品牌信息,为您选购点餐本品牌商品提供全方位的价格参考,提供愉悦的网上购物体验!https://m.jd.com/brand/16729bea135b12fe23b4.html
4.javascript实现操作cookie实现的可记忆菜单导航菜单<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 可记忆菜单 body {font:12px Tahoma, sans-serif;color:#4D4D4D;margin:0px; text-align:center} a{color:#4D4D4D;text-decoration:none} a:hover{color:#AD00https://www.jb51.net/article/10516.htm
5.菜单标记的英文菜单标记翻译菜单标记英语怎么说海词词典,最权威的学习词典,专业出版菜单标记的英文,菜单标记翻译,菜单标记英语怎么说等详细讲解。海词词典:学习变容易,记忆很深刻。http://dict.cn/%E8%8F%9C%E5%8D%95%E6%A0%87%E8%AE%B0
6.8.5发行注记RedHatProductDocumentationRed Hat Enterprise Linux 8.5 Red Hat Enterprise Linux 8.5 发行注记 Red Hat Customer Content Services 法律通告 摘要 本发行注记提供了在 Red Hat Enterprise Linux 8.5 中已实现的改进和附加功能的高级覆盖,以及此版本中已知的问题,以及重要的 bug 修复、技术预览、已弃用的功能和其他详情。 https://docs.redhat.com/documentation/zh-tw/red_hat_enterprise_linux/8/html-single/8.5_release_notes
7.html5menu标签的具体定义和html5menu标签的用法详细解析当然,menu属性不止这么多,本文章只是列举出了一些常用的属性。 运行结果如下: html5 menu标签的提示和注释: 提示:请使用 CSS 来设置菜单列表的样式! HTML 4.01 与 HTML5 之间的差异 在HTML 4.01 中已弃用 元素。 在HTML5 中重新定义了 元素。 HTML 与 XHTML 之间的差异 在HTML 4.01 中,menu 元素不被https://m.php.cn/faq/409002.html
8.菜单命令(C++)MicrosoftLearn若要将菜单命令与 MFC 应用程序中的状态栏文本字符串相关联,请在“菜单”编辑器中选择菜单命令。 在 属性窗口的“提示” 框中键入关联的状态栏文本。在C++ 项目中,可以向菜单和菜单命令分配访问键(使用户可以使用键盘选择菜单的助记键)。若要将访问(快捷)键分配给菜单命令,请在菜单名称或命令名称中的某个字母https://docs.microsoft.com/zh-cn/cpp/windows/assigning-access-keys-to-menu-commands?view=vs-2017
9.2024年04月徐州市泉山区人民法院2024年招考15名书记员笔试近年解题思路:第一步,看提问方式,本题属于选非题。 第二步,找关键信息。 ①对尚未处理完的事情,比已处理完成的事情印象更加深刻。 第三步,辨析选项。 A项:仍然记着小学时没有买到的一张特别喜欢的贺卡,属于“对尚未处理完的事情印象深刻”,符合定义; B项:能记住所有客人所点菜单,属于“对尚未处理完的事情印象深https://max.book118.com/html/2024/0430/7156001135006102.shtm
10.有道云APP官方下载有道云笔记APP(原有道笔记)是一款专业的多平台记录工具,凭借先进的“增量式同步”,“三备份存储”等前沿技术,力保用户线上资料库数据的安全与稳定,深受千万用户的痴迷与依赖,此外有道云笔记还可多端闪电同步,让用户可随时肆意查看!本网站还提供安卓版有道云笔记,https://m.onlinedown.net/soft/281303.htm/
11.微信怎么设置笔记的形式设置笔记形式的方法2、点下右上角添加图标,进入到笔记详情窗口设置你的笔记内容,点下右上角图标,进入到笔记菜单功能点https://ask.zol.com.cn/x/15990832.html
12.审图标记软件smartmark使用手册.docx退一万步说,即使SmartMark程序出现BUG,只要软软件界若菜单关闭后,呼出本菜单令是:STBJ(助记:“审图标记”)。 功能详 按照命令行提示,在图面中定热点区域按照命令行提示,在图面中定热点区域矩形的两个对角键入标记的文字,也可以留而布局一般是1:100或1:50比例,写字10就合适了,如需在布局里缩小文字大 移动标记https://www.renrendoc.com/paper/234767196.html
13.为视频节目提供视频标记的系统和方法根据本发明的一个优选实施例,视频标记控制器能够为视频节目创建多个视频标记。 根据本发明的一个优选实施例,视频标记控制器能够为视频节目在视频标记菜单中显示视频标记。 根据本发明的另一个优选实施例,视频标记控制器能够为视频节目在用于视频节目的视频标记时间线中显示视频标记。 https://www.xjishu.com/zhuanli/58/03814022.html