预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共36页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四章菜单、工具栏和状态栏4.1菜单顶层菜单4.1.1用编辑器设计菜单 1.编辑菜单需要说明的是,VisualC++将顶层菜单项的默认属性定义为“弹出”(下拉)菜单,即该菜单项有下拉式子菜单。(2)单击“测试”菜单项下方的空位置,在菜单项属性对话框中,输入标题“切换菜单(&D)”,该菜单项的资源标识符为ID_TEST_CHANGE。2.菜单命令的消息映射 菜单项、工具栏的按钮以及快捷键等用户交互对象都能产生WM_COMMAND命令消息。命令消息能够被文档类、应用类、窗口类以及视图类等多种对象接收、处理,且用户可以用ClassWizard对命令消息进行映射。例如,上述的“切换菜单”菜单项的命令映射过程如下: (1)MFCClassWizard对话框,并自动切换到MessageMaps页面。 (2)CMainFrame中的ID_TEST_CHANGE,增加函数(3)在成员函数中添加下列代码: voidCMainFrame::OnTestChange() {MessageBox("现在就切换吗?");} (4)编译运行并测试。4.1.2使用键盘快捷键 加速键也往往被称为键盘快捷键,一个加速键就是一个按键或几个按键的组合,它用于激活特定的命令。加速键也是一种资源,它的显示、编辑过程和菜单相似。 (1)选中加速键 (2)建立一个新的加速键加速键常规(General)属性的各项含义(3)在加速键属性对话框中,先选择在Ex_SDI应用程序菜单资源添加的“切换菜单”菜单项ID_TEST_CHANGE作为要联用的加速键的ID标识符,然后单击[下一键]按钮,并按下Ctrl+1作为此加速键的键值。 将ID_TEST_CHANGE菜单项的标题改成“切换菜单(&C)\tCtrl+1”,其中“\t”是将后面的“Ctrl+1”定位到下一个水平制表位。 (4)编译运行并测试。4.1.3更改应用程序菜单 下面就上节的单文档应用程序Ex_SDI的基础上,为其添加菜单资源并实现应用程序的菜单更改。如下面的过程: (1)按快捷键Ctrl+R,弹出“插入资源”对话框,在资源类型中选定“Menu”。(2)为应用程序添加一个新的菜单资源 (3)修改菜菜单属性 (4)通过其属性对话框为菜单ID_MENU1添加一个顶层弹出菜单项“测试(&T)”,并在该菜单下添加一个子菜单项“返回(&R)”,ID设为ID_TEST_RETURN。 (5)为CMainFrame类添加一个CMenu类型的成员变量m_NewMenu,CMenu类是用来处理菜单的一个MFC类。(6)为菜单项ID_TEST_RETURN添加COMMAND消息映射,使用默认的消息映射函数名,并添中下列代码: voidCMainFrame::OnTestReturn() { m_NewMenu.Detach(); //使菜单对象和菜单句柄分离 m_NewMenu.LoadMenu(IDR_MAINFRAME); SetMenu(NULL); //清除应用程序菜单 SetMenu(&m_NewMenu);//设置应用程序菜单 }(7)修改CMainFrame::OnTestChange中的代码: voidCMainFrame::OnTestChange(){ //MessageBox("现在就切换吗?"); m_NewMenu.Detach(); m_NewMenu.LoadMenu(IDR_MENU1);SetMenu(NULL); SetMenu(&m_NewMenu); } (8)编译运行程序4.1.4菜单的编程控制 1.创建菜单 BOOLCreateMenu();//产生一个空菜单 BOOLCreatePopupMenu(); 2.装入菜单 BOOLLoadMenu(LPCTSTRlpszResourceName); BOOLLoadMenu(UINTnIDResource); 其中,lpszResourceName为菜单资源名称,nIDResource为菜单资源ID标识符。 3.添加菜单项 BOOLAppendMenu(UINTnFlags,UINTnIDNewItem=0,LPCTSTRlpszNewItem=NULL); BOOLAppendMenu(UINTnFlags,UINTnIDNewItem,constCBitmap*pBmp); BOOLInsertMenu(UINTnPosition,UINTnFlags,UINTnIDNewItem=0, LPCTSTRlpszNewItem=NULL); BOOLInsertMenu(UINTnPosition,UINTnFlags,UINTnIDNewItem,constCBitmap*pBmp);nFlags的值及其对其他参数的影