第1章概述菜单和工具栏菜单工具栏第1章概述菜单菜单可以可视方式创建和使用,也可灵活地动态创建,调整和控制,如创建快捷菜单等。1.创建和使用可视化方式例1.利用MFCAppWizzard,创建单文档应用myApp1,使用资源编辑器创建如下菜单测试黑色红色1)编辑器使用菜单的标识,标题,提示,状态和风格等在菜单的空位置上双击鼠标左键,出现菜单项的属性对话框:测试菜单项=》ID:灰Caption:测试弹出黑色菜单项=》ID:ID_TEST_BLACKCaption:黑色选中的红色菜单项=》ID:ID_TEST_RedCaption:红色变灰提示:非激活状态分隔符菜单项=》第1章概述菜单此时编译,菜单还无任何功能,处于非活动状态。利用类向导完成消息映射,并编辑消息响应函数。2)消息映射MessageMapsClassname:CMainFrameObjectID:ID_TEST_BLACKMessage:COMMANDMemberfunctionname:默认OnTestBlack3)消息响应添加OnTestBlack函数代码:MessageBox(黑色);第1章概述菜单2.风格和外观使用助记符,快捷键,“…”等,应遵循下列一些规则:“…”若单击某菜单项后,将弹出一个对话框助记符例助记符T作用:当按住“Alt”键不放,再敲击该助记符键T时,对应的菜单项就会被选中,在菜单打开时,直接按相应的助记符键,对应的菜单项也会被选中。实现:在标题框中输入“测试(&T)”。第1章概述菜单快捷键快捷键是一个组合键例快捷键Ctrl+B作用:任何时候按下快捷键,相应的菜单命令都会被执行。实现:1)添加快捷键项在加速键属性对话框中,双击空白处,在ID中选择菜单项ID_TEST_BLACK,并按下Ctrl+B作为此加速键的键值。2)在相应菜单项显示文本中添加加速键内容将ID_TEST_BLACK菜单项的标题改成“黑色(&B)\tCtrl+B”。第1章概述菜单菜单的代码方式:调用相应函数,编程控制1)创建菜单BOOLCreateMenu();//产生一个空菜单BOOLCreatePopupMenu();2)加载菜单LoadMenu//或者用SetMenu对应用程序菜单进行重新设置3)添加菜单项AppendMenuInsertMenu4)删除菜单项BOOLDeleteMenu(UINTnPosition,UINTnFlags);第1章概述菜单5)获取菜单项UINTGetMenuItemCount()const;UINTGetMenuItemID(intnPos)const;CMenu*GetSubMenu(intnPos)const;6)菜单的使能pCmdUI-Enable(true);pCmdUI-Enable(false);7)菜单的勾选pCmdUI-SetCheck(1);pCmdUI-SetCheck(0);例黑色菜单状态控制voidCR01View::OnUpdateTestBlack(CCmdUI*pCmdUI){pCmdUI-Enable(false);pCmdUI-SetCheck(1);}第1章概述菜单例2用代码方式添加并处理一个菜单项(1)创建一个新的标识符选择“查看”菜单→“ResourceSymbols…”命令,弹出如图所示的“资源符号”对话框。新建-name:ID_TEST_YELLOW,值:101(2)在CMainFrame::OnCreate函数中添加下列代码intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){...CMenu*pSysMenu=GetMenu();//获得程序菜单指针CMenu*pSubMenu=pSysMenu-GetSubMenu(4);//获得第5个子菜单的指针CStringStrMenuItem(黄色(&Y)...\tCtrl+Y);pSubMenu-AppendMenu(MF_STRING,ID_TEST_YELLOW,StrMenuItem);//在子菜单中增加一菜单项pSubMenu-AppendMenu(MF_SEPARATOR);//增加一水平分隔线m_bAutoMenuEnable=FALSE;//关闭系统自动更新菜单状态pSysMenu-EnableMenuItem(ID_TEST_YELLOW,MF_BYCOMMAND|MF_ENABLED);DrawMenuBar();//更新菜单return0;}第1章概述菜单(3)编译运行,创建了:黄色(&Y)...\tCtrl+Y,增加一水平分隔线。但此时选择“新的菜单项”命令不会有反应。(4)用MFCClassWizard在CMainFrame添加OnCommand消息函数的重载,并添加下列代码:BOOLCMainFrame::OnCommand(WPARAMwParam,LPARAMlParam){//wParam的低字节表示菜单、控件、加速键的命令IDif(LOWORD(wParam)==ID_TEST_YELLOW)MessageBox(黄色);returnCFrameWnd::OnCommand(wParam,lParam);}(5)编译运行并测试。第1章概述菜单快捷菜单当用户按下鼠标右键时,就会相应地弹出一个浮动菜单,其中提供了几个与当前选择内容相关的选项。例3使用快捷菜单(1)用MFCClassWizard在视类添加WM_CONTEXTMENU消息映射,添加代码:voidCmyApp1View::OnContextMenu(CWnd*pWnd,CPointpoint){CMainFrame*pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;//获得主窗口指针CMenu*pSysMenu=pFrame-GetMenu();//获得程序窗口菜单指针intnCount=pSysMenu-GetMenuItemCount();//获得顶层菜单个数intnSubMenuPos=-1;第1章概述菜单for(inti=0;inCount;i++){//查找“测试”菜单CStringstr;pSysMenu-GetMenuString(i,str,MF_BYPOSITION);if(str.Left(4)==测试){nSubMenuPos=i;break;}}if(nSubMenuPos0)return;//没有找到,返回pSysMenu-GetSubMenu(nSubMenuPos)-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);}第1章概述菜单(2)在CmyApp1View.cpp文件的前面添加CMainFrame类的文件包含:#includeMainFrm.h(3)运行并测试。当用户在应用程序窗口的客户区中右击鼠标,会弹出如图的快捷菜单。此时在按快捷菜单“黄色(Y)”,程序并没有反应。需在视类中,添加OnCommand消息的处理函数BOOLCmyApp1View::OnCommand(WPARAMwParam,LPARAMlParam){if(LOWORD(wParam)==ID_TEST_YELLOW)MessageBox(黄色!);returnCView::OnCommand(wParam,lParam);}运行并测试。第1章概述工具栏1.编辑原有工具栏使用编辑器Toolbar,在原工具栏IDR_MAINFRAME添加两个按钮。工具栏和菜单相结合,或单独使用工具栏和菜单相结合:将两个按钮的标识设为:ID_TEST_BLACK和ID_TEST_RED。例1创建和使用工具按钮(1)编辑“Toolbar”中的IDR_MAINFRAME工具栏,创建两个按钮。(2)将按钮的ID标识符设置为相关联的菜单项ID。(3)编译测试第1章概述工具栏2.隐藏原工具栏ShowControlBar(&m_wndToolBar,false,false);第二个参数为TRUE时表示显示,否则表示隐藏;第三个参数用来表示是否延迟显示或隐藏,当为FALSE时表示立即显示或隐藏。例2隐藏原有的工具栏ShowControlBar(&m_wndToolBar,false,false);//立刻隐藏工具栏m_wndToolBar3.创建新工具栏利用资源编辑器Toolbar,创建一个新工具栏IDR_TOOLBAR_NEW第1章概述工具栏4.显示新工具栏(1)在CMainFrame类中protected区,添加一个成员m_wndMyToolBar,类型为CToolBar:CToolBarm_wndMyToolBar;(2)在OnCreate函数中添加代码;if(!m_wndMyToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||!m_wndMyToolBar.LoadToolBar(IDR_TOOLBAR_NEW)){TRACE0(Failedtocreatetoolbar\n);return-1;//failtocreate}此时,新工具栏已经能正确显示。第1章概述工具栏5.新工具栏使用若将按钮的ID标识符设置为相关联的菜单项ID,则工具栏已可实现已有菜单功能。工具栏单独使用:利用ClassWizzard为其添加消息映射和消息响应函数即可,与菜单方法类似。例在新建的工具中,添加一个Green按钮。其ID设为ID_TEST_GREEN,为其添加command消息映射和消息响应函数.第1章概述工具栏总结菜单建立和使用风格(助记符,快捷键,…)菜单状态控制快捷菜单工具栏编辑和使用显示或隐藏新建和使用第1章概述工具栏任务建立一个程序,包含菜单和工具栏。实现画矩形和椭圆,或显示文字信息等功能。注释1.参考代码:RedrawWindow();CClientDCdc(this);dc.Rectangle(10,10,200,200);dc.Ellipse(10,10,200,200);dc.TextOut(0,0,首条消息);CDC*pdc=GetDC();pdc-Rectangle(10,10,200,200);ReleaseDC(pdc);//或CClientDC*pdc=newCClientDC(this);...;deletepdc;第1章概述工具栏2.方法技巧:隐藏工具栏在CMainFrame::OnCreate函数中,加入:m_wndToolBar.ShowWindow(false);或ShowControlBar(&m_wndToolBar,false,false);显示自建菜单将pDocTemplate=newCSingleDocTemplate中的IDR_MAINFRAME,修改为IDR_MENU1修改应用标题在CXXApp::InitInstance函数中,加入:m_pMainWnd-SetWindowText(MyApp);