菜单快捷键和控制条.ppt

上传人:牧羊曲112 文档编号:6142989 上传时间:2023-09-28 格式:PPT 页数:54 大小:722KB
返回 下载 相关 举报
菜单快捷键和控制条.ppt_第1页
第1页 / 共54页
菜单快捷键和控制条.ppt_第2页
第2页 / 共54页
菜单快捷键和控制条.ppt_第3页
第3页 / 共54页
菜单快捷键和控制条.ppt_第4页
第4页 / 共54页
菜单快捷键和控制条.ppt_第5页
第5页 / 共54页
点击查看更多>>
资源描述

《菜单快捷键和控制条.ppt》由会员分享,可在线阅读,更多相关《菜单快捷键和控制条.ppt(54页珍藏版)》请在三一办公上搜索。

1、第4章 菜单、快捷键和控制条,内容摘要:菜单快捷菜单动态生成菜单工具条状态条,返回目录,4.1 菜单,学习目标1.响应菜单消息控制菜单状态使用快捷键,4.1,返回第4章,程序的实现步骤,利用AppWizard生成程序框架(MenuTest)编辑资源 加入菜单消息处理函数 菜单命令的更新控制,4.1,步骤1 生成程序框架(MenuTest),项目名称:MenuTest选择单文档界面应用程序(Single document),4.1,步骤2 编辑资源,1.编辑菜单资源 画图 Pop-up 选中 Caption ID Prompt 矩形(&R)tCtrl+R ID_DRAW_RECT 在视中画矩形

2、椭圆(&C)tAlt+C ID_DRAW_CIRCLE 在视中画椭圆 2.编辑快捷键资源ID ModifiersKey ID_DRAW_RECT Ctrl R ID_DRAW_CIRCL Alt C,4.1,步骤3 加入菜单消息处理函数,Class Name Objects IDs MessagesCMenuTestView ID_DRAW_RECT COMMANDCMenuTestView ID_DRAW_ CIRCLE COMMAND,4.1,void CMenuTestView:OnDrawRect()CClientDC dc(this);dc.Rectangle(50,50,200,1

3、50);,void CMenuTestView:OnDrawCircle()CClientDC dc(this);dc.Ellipse(250,50,400,150);,步骤4 菜单命令的更新控制,1.在画图 菜单中再添加两个菜单项Caption ID Prompt 允许画矩形 ID_DRAW_ENABLE-禁止画矩形 ID_DRAW_DISABLE-在视类中添加一个记录当前“矩形”菜单项状态的变量BOOL m_Enable;3.在构造函数中初始化数据成员m_Enable m_ Enable=TRUE;,4.1,步骤4 菜单命令的更新控制,4.添加 菜单响应函数Class Name Objec

4、ts IDs MessagesCMenuTestView ID_DRAW_ENABLE COMMANDCMenuTestView ID_DRAW_ DISABLE COMMANDCMenuTestView ID_DRAW_RECT UPDATE_COMMAND_UI CMenuTestView ID_DRAW_ENABLE UPDATE_COMMAND_UI CMenuTestView ID_DRAW_ DISABLE UPDATE_COMMAND_UI,4.1,void CMenuTestView:OnUpdateDrawRect(CCmdUI*pCmdUI)pCmdUI-Enable(m_

5、Enable);,步骤4 菜单命令的更新控制,4.1,void CMenuTestView:OnDrawDisable()m_Enable=FALSE;,void CMenuTestView:OnDrawEnable()m_Enable=TRUE;,void CMenuTestView:OnUpdateDrawEnable(CCmdUI*pCmdUI)pCmdUI-SetCheck(m_Enable?1:0);,void CMenuTestView:OnUpdateDrawDisable(CCmdUI*pCmdUI)pCmdUI-SetCheck(m_Enable?0:1);,基本知识,pCm

6、dUI-Enable(true|false);pCmdUI-SetCheck(1|0);使用COMMAND消息响应菜单项的选择事件 UPDATE_COMMAND_UI消息控制菜使用单项状态,4.1,4.2 快捷菜单,学习目标1.实现快捷菜单,4.2,返回第4章,程序的实现步骤,编辑快捷菜单资源显示跟踪菜单添加菜单响应函数实现对话框功能,4.2,步骤1 编辑快捷菜单资源,添加菜单(IDR_POPUP_MENU)Popup1 选中Pop-up Caption ID 编辑矩形坐标 ID_EDIT_RECT 编辑椭圆坐标 ID_EDIT_CIRCLE,4.2,步骤2 显示快捷菜单,添加响应函数Clas

7、s Name ObjectsIDs MessagesCMainFrame CMainFrame WM_CONTEXTMENU,4.2,void CMainFrame:OnContextMenu(CWnd*pWnd,CPoint point)/TODO:Add your message handler code hereCMenu menu;if(menu.LoadMenu(IDR_POPUP_MENU)CMenu*pPopup=menu.GetSubMenu(0);pPopup-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point

8、.y,this);,步骤2 显示快捷菜单,4.2,步骤3 添加菜单消息处理函数,(1)编辑对话框资源,静态文本框,IDC_STATIC,左上角坐标(X1,Y1)静态文本框,IDC_STATIC,右下角坐标(X2,Y2)编辑框,IDC_EDIT_X1编辑框,IDC_EDIT_Y1编辑框,IDC_EDIT_X2编辑框,IDC_EDIT_Y2按扭控件,IDOK,确定按扭控件,IDCANCEL,取消,4.2,步骤3 添加菜单消息处理函数,(2)为对话框添加控件关联变量 IDC_EDIT_X1,int,m_nX1IDC_EDIT_Y1,int,m_nX1IDC_EDIT_X2,int,m_nX1IDC_

9、EDIT_Y2,int,m_nX1(3)在主框架中加入变量并初始化 int m_nRectLeft;int m_nRectTop;int m_nRectRight;int m_nRectBottom;int m_nCircleLeft;int m_nCircleTop;int m_nCircleRight;int m_nCircleBottom;,4.2,CMainFrame:CMainFrame()/TODO:add member initialization code herem_nRectLeft=50;m_nRectTop=50;m_nRectRight=200;m_nRectBott

10、om=150;m_nCircleLeft=50;m_nCircleTop=50;m_nCircleRight=200;m_nCircleBottom=150;,步骤3 添加菜单消息处理函数,4.2,void CMenuTestView:OnDrawRect()CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();CClientDC dc(this);dc.Rectangle(pMainFrame-m_nRectLeft,pMainFrame-m_nRectTop,pMainFrame-m_nRectRight,pMainFram

11、e-m_nRectBottom);void CMenuTestView:OnDrawCircle()CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();CClientDC dc(this);dc.Ellipse(pMainFrame-m_nCircleLeft,pMainFrame-m_nCircleTop,pMainFrame-m_nCircleRight,pMainFrame-m_nCircleBottom);,步骤3 添加菜单消息处理函数,(4)修改画图函数,4.2,步骤3 添加菜单消息处理函数,(5)加入菜单消息处理函

12、数,void CMenuTestView:OnEditRect()CDlgEdit dlg(1);dlg.DoModal();void CMenuTestView:OnEditCircle()CDlgEdit dlg(2);dlg.DoModal();,4.2,步骤4 实现对话框功能,(1)修改构造函数,CDlgEdit:CDlgEdit(int type,CWnd*pParent/*=NULL*/):CDialog(CDlgEdit:IDD,pParent)/AFX_DATA_INIT(CDlgEdit)m_nX1=0;m_nX2=0;m_nY1=0;m_nY2=0;/AFX_DATA_IN

13、ITm_nType=type;,(2)添加确定命令按扭响应函数OnOK(),4.2,步骤4 实现对话框功能,void CDlgEdit:OnOK()UpdateData(TRUE);CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();if(m_nType=1)pMainFrame-m_nRectLeft=m_nX1;pMainFrame-m_nRectTop=m_nY1;pMainFrame-m_nRectRight=m_nX2;pMainFrame-m_nRectBottom=m_nY2;else if(m_nType=2)

14、pMainFrame-m_nCircleLeft=m_nX1;pMainFrame-m_nCircleTop=m_nY1;pMainFrame-m_nCircleRight=m_nX2;pMainFrame-m_nCircleBottom=m_nY2;CDialog:OnOK();,4.2,基本知识,OnContextMenu()函数 CMenu类LoadMenu()函数TrackPopupMenu()函数AfxGetApp()函数CWinApp 类的GetMainWnd()函数,4.2,4.3 动态菜单,学习目标1.菜单动态增加与删除用户自定义消息动态菜单消息响应,4.3,返回第4章,程序的

15、实现步骤,编辑菜单资源添加菜单响应函数加入动态菜单响应函数,4.3,步骤1 编辑菜单资源,为菜单(IDR_POPUP_MENU)添加两个菜单项:Caption ID1.Seprator2.增加椭圆控制菜单 ID_ADD_MENU 3.删除椭圆控制菜单 ID_DELETE_MENU,4.3,步骤2 添加菜单响应函数,1.OnAddMenu()2.OnDeleteMenu(),4.3,步骤2 添加菜单响应函数,4.3,void CMainFrame:OnAddMenu()/TODO:Add your command handler code hereCString menu2;menu0=允许画椭

16、圆;menu1=禁止画椭圆;CWnd*pMainFrame=AfxGetMainWnd();CMenu*pMenuDyna=NULL;CMenu*pMenu=NULL;CMenu*pTopMenu=pMainFrame-GetMenu();int iPos;for(iPos=pTopMenu-GetMenuItemCount()-1;iPos=0;iPos-)pMenu=pTopMenu-GetSubMenu(iPos);if(pMenu,步骤2 添加菜单响应函数,4.3,void CMainFrame:OnDeleteMenu()/TODO:Add your command handler

17、code hereCWnd*pMainFrame=AfxGetMainWnd();CMenu*pMenuDyna=NULL;CMenu*pMenu=NULL;CMenu*pTopMenu=pMainFrame-GetMenu();int iPos;for(iPos=pTopMenu-GetMenuItemCount()-1;iPos=0;iPos-)pMenu=pTopMenu-GetSubMenu(iPos);if(pMenu,步骤3 添加动态菜单响应函数,在类CMainFrame中增加一个变量并初始化int m_SelectMenu;当m_SelectMenu为0时,第一项为选中状态,允许

18、画椭圆。否则第二项为选中状态,禁止画椭圆。,4.3,CMainFrame:CMainFrame()/TODO:add member initialization code herem_SelectMenu=0;,步骤3 添加动态菜单响应函数,2.重载主框架类的OnCmdMsg()函数 Project:MenuTestClass Name:CMainFrameObjects IDs:CMainFrameMessages:OnCmdMsg,4.3,4.3,步骤3 添加动态菜单响应函数,BOOL CMainFrame:OnCmdMsg(UINT nID,int nCode,void*pExtra,A

19、FX_CMDHANDLERINFO*pHandlerInfo)if(pHandlerInfo=NULL)for(int i=0;i2;i+)if(nID=(UINT)(WM_USER+10+i)if(nCode=CN_COMMAND)DoSelectMenu(i);else if(nCode=CN_UPDATE_COMMAND_UI)DoUpdateSelectMenu(i,(CCmdUI*)pExtra);return true;return CFrameWnd:OnCmdMsg(nID,nCode,pExtra,pHandlerInfo);,步骤3 添加动态菜单响应函数,3.在CMainF

20、rame类中增加两个函数DoSelectMenu()DoUpdateSelectMenu(),4.3,void CMainFrame:DoSelectMenu(int i)m_nSelectMenu=i;,步骤3 添加动态菜单响应函数,4.3,void CMainFrame:DoUpdateSelectMenu(int i,CCmdUI*pCmdUI)if(i=m_nSelectMenu)pCmdUI-SetCheck(1);elsepCmdUI-SetCheck(0);pCmdUI-Enable(true);,步骤3 添加动态菜单响应函数,4.为椭圆菜单项加入UPDATE_COMMAND_U

21、I消息处理函数,4.3,void CMainFrame:OnUpdateDrawCircle(CCmdUI*pCmdUI)/TODO:Add your command update UI handler code hereif(m_nSelectMenu=0)pCmdUI-Enable(true);elsepCmdUI-Enable(false);,基本知识,CWnd 类:GetMenu()函数 CMenu类GetMenuItemCount()函数GetMenuItemID()函数DeleteMenu()函数AppendMenu()函数OnCmdMsg消息,4.3,4.4 工具条,学习目标1.

22、自定义工具条在工具条中添加控件,4.4,返回第4章,程序的实现步骤,编辑工具条资源创建工具条 在工具条上添加控件加入控件响应函数,4.4,步骤1 编辑工具条资源,添加工具条(IDR_MYTOOLBAR):,4.4,ID_DRAW_RECT,ID_DRAW_CIRCLE,ID_DRAW_LINE,ID_COMBOBOX,工具条含四个工具按扭,其中前两个与菜单“画图”的前两个菜单项的ID号相同,第三个按扭用于画直线,第四个按扭用来显示组合框。,步骤2 创建工具条,在类CmainFrame中定义工具条数据成员:CToolBar m_wndMyToolBar;在类CMainFrame的OnCreate

23、函数中加入以下代码:,4.4,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_MYTOOLBAR)TRACE0(Failed to create toolbarn);return-1;/fail to create.m_wndMyToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableD

24、ocking(CBRS_ALIGN_ANY);DockControlBar(,步骤2 创建工具条,3.添加画线响应函数,4.4,void CMenuTestView:OnDrawLine()/TODO:Add your command handler code hereCClientDC dc(this);dc.MoveTo(20,20);dc.LineTo(200,200);,步骤3 在工具条上添加控件,在类CMainFrame中定义数据成员CComboBox m_ComboBox;2.在CMainFrame的OnCreate函数中加入代码,4.4,CRect rect;m_wndMyToo

25、lBar.SetButtonInfo(3,ID_COMBOBOX,TBBS_SEPARATOR,160);m_wndMyToolBar.GetItemRect(3,步骤4 加入组合框响应函数,定位到MainFrm.h中类的定义处,在其中添加消息响应函数的原形:afx_msg void OnSelchangeCombo();定位到MainFrm.cpp中消息映射宏的定义处,在其中添加ComboBox控件的ON_CBNSELCHANGE消息的映射宏:ON_CBN_SELCHANGE(ID_COMBOBOX,OnSelchangeCombo),4.4,步骤4 加入组合框响应函数,3.在MainFrm

26、.cpp中添加消息映射函数体:,4.4,void CMainFrame:OnSelchangeCombo()CString mess;int CurSel;CurSel=m_ComboBox.GetCurSel();mess=您选择了第;char No3;itoa(CurSel,No,10);mess+=No;mess+=项!;MessageBox(mess,消息框,MB_OK|MB_ICONINFORMATION);,基本知识,CToolBar 类:CreateEx()函数 SetButtonInfo()GetItemRect()CComboBox 类 Create()函数AddString

27、()函数SetCurSel()函数手工添加消息响应函数,4.4,4.5 状态条,学习目标1.在状态信息行显示信息 在状态指示器 显示键盘状态,4.5,返回第4章,程序的实现步骤,在文件MainFrm.cpp中,找到状态条indicators数组的定义处添加代码 创建Ctrl键和Shift键状态指示器的字符串资源 为状态条添加标识号 在函数CMainFrame:OnCreate()函数中,添加状态条的设置代码 显示控制键状态 显示鼠标在视中的位置坐标,4.5,步骤1 在indicators数组中添加新元素,4.5,static UINT indicators=ID_SEPARATOR,/stat

28、us line indicatorID_SEPARATOR,/显示x坐标ID_SEPARATOR,/显示x坐标ID_INDICATOR_CTRL,/显示Ctrl键的状态ID_INDICATOR_SHIFT,/显示Shift键的状态ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,;,步骤2 创建Ctrl键和Shift键状态指示器的字符串资源,4.5,在Workspace窗口中双击ResourceView标签的String Table,打开字符串资源编辑器。选中一个以ID_INDICATOR为开头的字符串资源,按Insert键,插入两个新的

29、字符串资源:ID CaptionID_INDICATOR_CTRL CtrlID_INDICATOR_SHIFT Shift,步骤3 为状态条添加标识号,通过菜单View下的Resource Symbols菜单项,打开Resource Symbol对话框,单击New按扭,在Name中输入IDC_STATUSBAR,Value取默任值,单击OK按扭。,步骤4 在函数CMainFrame:OnCreate()函数中,添加状态条的设置代码,4.5,if(!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,size

30、of(indicators)/sizeof(UINT)TRACE0(Failed to create status barn);return-1;/fail to createm_wndStatusBar.SetPaneInfo(1,IDC_STATUSBAR,SBPS_POPOUT,50);m_wndStatusBar.SetPaneInfo(2,IDC_STATUSBAR,SBPS_POPOUT,50);,步骤5 显示控制键状态,4.5,1.在MainFrm.h文件中的类定义内加入消息响应函数的原形,并将成员m_wndStatusBar改成公用类型:,public:CStatusBar m

31、_wndStatusBar;afx_msg void OnUpdateKeyCtrl(CCmdUI*pCmdUI);afx_msg void OnUpdateKeyShift(CCmdUI*pCmdUI);,2.在文件MainFrm.cpp消息映射宏的定义处添加两消息映射宏,ON_UPDATE_COMMAND_UI(ID_INDICATOR_CTRL,OnUpdateKeyCtrl)ON_UPDATE_COMMAND_UI(ID_INDICATOR_SHIFT,OnUpdateKeyShift),步骤5 显示控制键状态,4.5,3.在文件MainFrm.cpp中添加消息映射函数体,void C

32、MainFrame:OnUpdateKeyCtrl(CCmdUI*pCmdUI)pCmdUI-Enable(:GetKeyState(VK_CONTROL)Enable(:GetKeyState(VK_SHIFT)0);,步骤6 显示鼠标在视中的位置坐标,4.5,在类CMenuTestView中添加鼠标移动消息响应函数,void CMenuTestView:OnMouseMove(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultchar PositionString20;C

33、MainFrame*MainFrame=(CMainFrame*)AfxGetMainWnd();sprintf(PositionString,X:%d,point.x);MainFrame-m_wndStatusBar.SetPaneText(1,PositionString);sprintf(PositionString,y:%d,point.y);MainFrame-m_wndStatusBar.SetPaneText(2,PositionString);CView:OnMouseMove(nFlags,point);,基本知识,CStatusBar 类:SetPaneInfo()函数 SetIndicators()函数SetPaneText()函数2.GetKeyState(VK_SHIFT)函数,4.5,返回第4章,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号