菜单和工具栏_第1页
菜单和工具栏_第2页
菜单和工具栏_第3页
菜单和工具栏_第4页
菜单和工具栏_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 概述 菜单和工具栏菜单和工具栏 菜单工具栏第1章 概述 菜单菜单可以可视方式创建和使用,也可灵活地动态创建,调整和控制,如创建快捷菜单等。1.创建和使用 可视化方式 例1.利用MFC AppWizzard,创建单文档应用myApp1,使用资源编辑器创建如下菜单 测试 黑色 红色 1)编辑器使用 菜单的标识,标题,提示,状态和风格等 在菜单的空位置上双击鼠标左键,出现菜单项的属性对话框: 测试菜单项= ID:灰 Caption:测试 弹出 黑色菜单项= ID:ID_TEST_BLACK Caption:黑色 选中的 红色菜单项= ID:ID_TEST_Red Caption:红色 变灰

2、提示:非激活状态 分隔符菜单项= 第1章 概述 菜单菜单 此时编译,菜单还无任何功能,处于非活动状态。利用类向导完成消息映射,并编辑消息响应函数。 2)消息映射 Message Maps Class name:CMainFrame Object ID:ID_TEST_BLACK Message:COMMAND Member function name: 默认OnTestBlack 3)消息响应 添加OnTestBlack函数代码: MessageBox(黑色);第1章 概述 菜单菜单2.风格和外观 使用助记符,快捷键,“”等,应遵循下列一些规则: “” 若单击某菜单项后,将弹出一个对话框 助记

3、符 例 助记符T 作用: 当按住“Alt”键不放,再敲击该助记符键T时,对应的菜单项就会被选中,在菜单打开时,直接按相应的助记符键,对应的菜单项也会被选中。 实现:在标题框中输入“测试(&T)”。第1章 概述 菜单菜单 快捷键 快捷键是一个组合键 例 快捷键Ctrl+B 作用: 任何时候按下快捷键,相应的菜单命令都会被执行。 实现: 1)添加快捷键项 在加速键属性对话框中,双击空白处,在ID中选择菜单项ID_TEST_BLACK,并按下Ctrl+B作为此加速键的键值。 2)在相应菜单项显示文本中添加加速键内容 将ID_TEST_BLACK菜单项的标题改成“黑色(&B)tCtrl

4、+B”。第1章 概述 菜单菜单 菜单的代码方式:调用相应函数,编程控制 1) 创建菜单 BOOL CreateMenu( );/ 产生一个空菜单 BOOL CreatePopupMenu( ); 2) 加载菜单 LoadMenu /或者用SetMenu对应用程序菜单进行重新设置 3) 添加菜单项 AppendMenu InsertMenu 4) 删除菜单项 BOOL DeleteMenu( UINT nPosition, UINT nFlags );第1章 概述 菜单菜单 5) 获取菜单项 UINT GetMenuItemCount( ) const; UINT GetMenuItemID(

5、int nPos ) const; CMenu* GetSubMenu( int nPos ) const; 6) 菜单的使能 pCmdUI-Enable(true); pCmdUI-Enable(false); 7) 菜单的勾选 pCmdUI-SetCheck(1); pCmdUI-SetCheck(0); 例 黑色菜单状态控制 void CR01View:OnUpdateTestBlack(CCmdUI* pCmdUI) pCmdUI-Enable(false); pCmdUI-SetCheck(1); 第1章 概述 菜单菜单 例2 用代码方式添加并处理一个菜单项 (1) 创建一个新的标识

6、符 选择“查看”菜单“Resource Symbols”命令,弹出如图所示的“资源符号”对话框。 新建- name:ID_TEST_YELLOW, 值:101 (2) 在CMainFrame:OnCreate函数中添加下列代码 int CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct) . CMenu * pSysMenu = GetMenu();/ 获得程序菜单指针 CMenu * pSubMenu = pSysMenu-GetSubMenu(4); /获得第5个子菜单的指针 CString StrMenuItem(黄色(&Y).tC

7、trl+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();/ 更新菜单 return 0; 第1章 概述 菜单菜单 (3) 编译运行,创建了:黄色(&Y).

8、tCtrl+Y,增加一水平分隔线。但此时选择“新的菜单项”命令不会有反应。 (4) 用MFC ClassWizard在CMainFrame添加OnCommand消息函数的重载,并添加下列代码: BOOL CMainFrame:OnCommand(WPARAM wParam, LPARAM lParam) / wParam的低字节表示菜单、控件、加速键的命令ID if (LOWORD(wParam) = ID_TEST_YELLOW) MessageBox(黄色); return CFrameWnd:OnCommand(wParam, lParam); (5) 编译运行并测试。第1章 概述 菜单

9、菜单 快捷菜单 当用户按下鼠标右键时,就会相应地弹出一个浮动菜单,其中提供了几个与当前选择内容相关的选项。 例3 使用快捷菜单 (1)用MFC ClassWizard在视类添加WM_CONTEXTMENU消息映射,添加代码: void CmyApp1View:OnContextMenu(CWnd* pWnd, CPoint point) CMainFrame* pFrame=(CMainFrame*)AfxGetApp()-m_pMainWnd;/ 获得主窗口指针 CMenu* pSysMenu = pFrame-GetMenu();/ 获得程序窗口菜单指针 int nCount = pSys

10、Menu-GetMenuItemCount(); / 获得顶层菜单个数 int nSubMenuPos = -1; 第1章 概述 菜单菜单 for (int i=0; iGetMenuString(i, str, MF_BYPOSITION); if (str.Left(4) = 测试) nSubMenuPos = i;break; if (nSubMenuPosGetSubMenu( nSubMenuPos) -TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this); 第1章 概述 菜单菜单 (2) 在Cmy

11、App1View.cpp文件的前面添加CMainFrame类的文件包含: #include MainFrm.h (3) 运行并测试。 当用户在应用程序窗口的客户区中右击鼠标,会弹出如图的快捷菜单。 此时在按快捷菜单“黄色(Y)”,程序并没有反应。 需在视类中,添加OnCommand消息的处理函数 BOOL CmyApp1View:OnCommand(WPARAM wParam, LPARAM lParam) if (LOWORD(wParam) = ID_TEST_YELLOW) MessageBox(黄色!); return CView:OnCommand(wParam, lParam);

12、运行并测试。第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 ); 第二个参

13、数为TRUE时表示显示,否则表示隐藏; 第三个参数用来表示是否延迟显示或隐藏,当为FALSE时表示立即显示或隐藏。 例2 隐藏原有的工具栏 ShowControlBar( &m_wndToolBar, false, false ); /立刻隐藏工具栏m_wndToolBar 3.创建新工具栏 利用资源编辑器Toolbar,创建一个新工具栏IDR_TOOLBAR_NEW第1章 概述 工具栏工具栏4.显示新工具栏 (1)在CMainFrame类中protected区,添加一个成员 m_wndMyToolBar,类型为CToolBar: CToolBar m_wndMyToolBar; (2

14、) 在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(Failed to create toolbarn); return -1; / fail to create 此时,新工具栏已经能正确显示。第1章 概述 工

15、具栏工具栏5.新工具栏使用 若将按钮的ID标识符设置为相关联的菜单项ID,则工具栏已可实现已有菜单功能。 工具栏单独使用: 利用ClassWizzard为其添加消息映射和消息响应函数即可,与菜单方法类似。 例 在新建的工具中,添加一个Green按钮。其ID设为ID_TEST_GREEN,为其添加command消息映射和消息响应函数.第1章 概述 工具栏工具栏总结 菜单 建立和使用 风格(助记符,快捷键,) 菜单状态控制 快捷菜单 工具栏 编辑和使用 显示或隐藏 新建和使用第1章 概述 工具栏工具栏任务 建立一个程序,包含菜单和工具栏。实现画矩形和椭圆,或显示文字信息等功能。注释 1.参考代码: RedrawWindow(); CClientDC dc(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=new CClientDC(this);.; delete pdc;第1章 概述 工具栏工具栏2.方法技巧: 隐藏工具栏 在

温馨提示

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

评论

0/150

提交评论