科锐vc培训视频剖析mfc六大关键技术5.菜单编程_第1页
科锐vc培训视频剖析mfc六大关键技术5.菜单编程_第2页
科锐vc培训视频剖析mfc六大关键技术5.菜单编程_第3页
科锐vc培训视频剖析mfc六大关键技术5.菜单编程_第4页
科锐vc培训视频剖析mfc六大关键技术5.菜单编程_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、菜单编程 武汉科锐消息的分类标准消息 除 MAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以 MAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCmdTarget派生的类,都可以接收到这类消息。通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以 MAND形式呈现。从CCmdTarget派生的类,都可以接收到这类消息。VC资源编辑器中的菜单VC默认生成

2、的单文档程序都有一个菜单资源。在资源编辑器里可以自由编辑菜单。(ID和名字),在classwizad中可以响应每个一可用菜单的事件。其中菜单消息响应在Frame,View,Document中均可响应。即在ClassWizad中选择相应的菜单ID和Frame or View or Document类的消息相应。消息的分类标准消息 除 MAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以 MAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。从CCm

3、dTarget派生的类,都可以接收到这类消息。通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以 MAND形式呈现。从CCmdTarget派生的类,都可以接收到这类消息。操作菜单获取菜单增加菜单删除菜单修改菜单菜单分类菜单项弹出菜单右键菜单CMenu类和菜单的结构MFC中CMenu类继承自CObject,它不是一个窗口,只是封装了基本的菜单操作:增、删、修改、创建等(简单的对菜单的Windows API封装)300301302303304012301234楼层房间获取菜单单文档程序CWnd:GetMenu(

4、)可以得到一个关于当前菜单的CMenu指针。GetSubMenu(n)得到第n个子菜单的CMenu指针。这样可以根据菜单结构来获取每个一菜单及菜单项。添加菜单BOOL AppendMenu( UINT nFlags,/决定下 UINT_PTR nIDNewItem = 0,/定义菜单号 LPCTSTR lpszNewItem = NULL ); /菜单名BOOL AppendMenu(/创建位图菜单 UINT nFlags, UINT_PTR nIDNewItem, const CBitmap* pBmp ); /位图类指针CBitMap:LoadBitmap(IDB_BITMAP/*资源ID

5、号*/);添加菜单BOOL InsertMenu( UINT nPosition,/插入的位置:序号或资源号 UINT nFlags,/决定上面nPosition是序号还是资源号 UINT_PTR nIDNewItem = 0,/插入菜单的资源号 LPCTSTR lpszNewItem = NULL /菜单名);BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, const CBitmap* pBmp /位图指针);删除菜单BOOL RemoveMenu( UINT nPosition, UINT nFlags

6、);BOOL DeleteMenu( UINT nPosition, UINT nFlags );修改菜单设为默认菜单(前面有对号)BOOL SetDefaultItem( UINT uItem, BOOL fByPos = FALSE );设为选择菜单(前面有对号)UINT CheckMenuItem( UINT nIDCheckItem, UINT nCheck );/多选BOOL CheckMenuRadioItem( UINT nIDFirst, UINT nIDLast, UINT nIDItem, UINT nFlags ); /单选修改菜单菜单改变BOOL ModifyMenu(

7、 UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem = 0, LPCTSTR lpszNewItem = NULL );BOOL ModifyMenu( UINT nPosition, UINT nFlags, UINT_PTR nIDNewItem, const CBitmap* pBmp );参数同创建菜单修改菜单菜单的可用与变灰UINT EnableMenuItem( UINT nIDEnableItem, UINT nEnable );创建自定义菜单用VC资源编辑器编辑自己的菜单资源命名为:IDMENU_FRAME。在Frame里调用Se

8、tMenu(NULL);取消当前菜单CMenu menu;menu.LoadMenu(IDMENU_FRAME);SetMenu(&menu);menu.Detach();命令更新 菜单项状态的维护是依赖于 MAND_UI消息,谁捕获 MAND_UI消息,MFC就在其中创建一个CCmdUI对象。我们可以通过手工或利用ClassWizard在消息映射中添加 MAND_UI宏来捕获 MAND_UI消息。 在后台所做的工作是:操作系统发出WM_INITMENUPOPUP消息,然后由MFC的基类如CFrameWnd接管。它创建一个CCmdUI对象,并与第一个菜单项相关联,调用对象的一个成员函数DoUpdate()。这个函数发出 MAND_UI消息,这条消息带有指向CCmdUI对象的指针。同一个CCmdUI对象就设置为与第二个菜单项相关联,这样顺序进行,直到完成所有菜单项。 更新命令UI处理程序仅应用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单项目。右键菜单响应View类右击事件CMenu menu;menu.LoadMenu(IDR_MENU);CMenu *pPopup=menu.GetSubMenu(0);ClientToScreen(&point);pPopup-TrackPopupMenu(TPM_LEF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论