《快捷键和控制条》PPT课件.ppt

上传人:小飞机 文档编号:5583563 上传时间:2023-07-30 格式:PPT 页数:77 大小:417KB
返回 下载 相关 举报
《快捷键和控制条》PPT课件.ppt_第1页
第1页 / 共77页
《快捷键和控制条》PPT课件.ppt_第2页
第2页 / 共77页
《快捷键和控制条》PPT课件.ppt_第3页
第3页 / 共77页
《快捷键和控制条》PPT课件.ppt_第4页
第4页 / 共77页
《快捷键和控制条》PPT课件.ppt_第5页
第5页 / 共77页
点击查看更多>>
资源描述

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

1、第4章 菜单、快捷键和控制条,内容摘要:菜单快捷菜单动态生成菜单工具条状态条,返回目录,菜单基础知识,Windows应用程序中除了客户区外还有非客户区。非客户区包括窗口的边框、标题栏、菜单栏、工具栏、状态栏和滚动条。其中菜单栏、工具栏和状态栏是用户与应用程序进行交互的重要工具。,菜 单,几乎所用的Windows应用程序都会使用到菜单,它为用户提供了操作应用程序需要的命令,是应用程序中可操作命令的集合。菜单分为两类:一类是依附于框架窗口的一般菜单,包括主菜单和子菜单。,菜 单,主菜单是最高层的菜单,子菜单是从主菜单下拉出的菜单,其位置都是固定的;另一类是弹出式菜单,也称为快捷菜单,是单击鼠标右键

2、后,在光标位置出现的浮动式菜单。添加新菜单项 编辑菜单项的属性,菜 单,删除菜单项 添加菜单消息处理函数 启用和禁用菜单命令 复选和单选标记菜单命令 创建弹出式菜单 快捷键,添加新菜单项,应用AppWizard创建的应用程序菜单栏。在多文档界面下增加了一个“窗口”菜单项。,添加新菜单项,用户往往不满足于AppWizard自动生成的菜单项,比如创建文件翻译系统中的菜单栏时,除以上菜单项外可能还需要对翻译语言提供选择菜单项。这时就需要用户根据自己的实际需要手动为菜单栏添加菜单项。,编辑菜单项的属性,在为菜单项添加名称时,系统已经自动打开一个名为“Menu Item Properties”的对话框。

3、输入的菜单项名称将会出现在“标题”文本框处。,编辑菜单项的属性,该对话框中各选项的含义分别是:“ID”文本框:菜单项的唯一标识,可由系统生成,也可由用户自定义。“标题”文本框:用户可见的菜单项名称。,编辑菜单项的属性,编辑菜单项的属性,“暂停”下拉列表框:选中相应菜单后就退出其所在的菜单。“提示”文本框:鼠标移动到相应菜单处时,在窗口状态栏会出现提示信息。,例题分析,4.1 菜单,学习目标1.响应菜单消息2.控制菜单状态3.使用快捷键,3.1,返回第4章,程序的实现步骤,1、利用AppWizard生成程序框架(MenuTest)2、编辑资源 3、加入菜单消息处理函数 4、菜单命令的更新控制,步

4、骤1 生成程序框架(MenuTest),项目名称:MenuTest选择单文档界面应用程序(Single document),步骤2 编辑资源,1.编辑菜单资源 画图 Pop-up 选中 Caption ID Prompt 矩形(&R)tCtrl+R ID_DRAW_RECT 在视图中画矩形 椭圆(&C)tAlt+C ID_DRAW_CIRCLE 在视图中画椭圆 2.编辑快捷键资源ID ModifiersKey ID_DRAW_RECT Ctrl R ID_DRAW_CIRCL Alt C,步骤3 加入菜单消息处理函数,Class Name Objects IDs MessagesCMenuTe

5、stView ID_DRAW_RECT COMMANDCMenuTestView ID_DRAW_ CIRCLE COMMAND,void CMenuTestView:OnDrawRect()CClientDC dc(this);dc.Rectangle(50,50,200,150);,void CMenuTestView:OnDrawCircle()CClientDC dc(this);dc.Ellipse(250,50,400,150);,步骤4 菜单命令的更新控制,1.在画图 菜单中再添加两个菜单项Caption ID Prompt 允许画矩形 ID_DRAW_ENABLE-禁止画矩形

6、ID_DRAW_DISABLE-在视类中添加一个记录当前“矩形”菜单项状态的变量BOOL m_Enable;3.在构造函数中初始化数据成员m_Enable m_ Enable=TRUE;,步骤4 菜单命令的更新控制,4.添加 菜单响应函数Class Name Objects IDs MessagesCMenuTestView ID_DRAW_ENABLE COMMANDCMenuTestView ID_DRAW_ DISABLE COMMANDCMenuTestView ID_DRAW_RECT UPDATE_COMMAND_UI CMenuTestView ID_DRAW_ENABLE UP

7、DATE_COMMAND_UI CMenuTestView ID_DRAW_ DISABLE UPDATE_COMMAND_UI,void CMenuTestView:OnUpdateDrawRect(CCmdUI*pCmdUI)pCmdUI-Enable(m_Enable);,步骤4 菜单命令的更新控制,void CMenuTestView:OnDrawDisable()m_Enable=FALSE;,void CMenuTestView:OnDrawEnable()m_Enable=TRUE;,void CMenuTestView:OnUpdateDrawEnable(CCmdUI*pCm

8、dUI)pCmdUI-SetCheck(m_Enable?1:0);,void CMenuTestView:OnUpdateDrawDisable(CCmdUI*pCmdUI)pCmdUI-SetCheck(m_Enable?0:1);,基本知识,1、pCmdUI-Enable(true|false);说明:使用户界面对象有效或无效2、pCmdUI-SetCheck(1|0);说明:设置或取消选中用户界面对象3、使用COMMAND消息响应菜单项的选择事件 4、UPDATE_COMMAND_UI消息控制菜使用单项状态,4.2 快捷菜单,学习目标1.实现快捷菜单,返回第4章,程序的实现步骤,1、编

9、辑快捷菜单资源2、显示跟踪菜单3、添加菜单响应函数4、实现对话框功能,步骤1 编辑快捷菜单资源,添加菜单(IDR_POPUP_MENU)Popup1 选中Pop-up Caption ID 编辑矩形坐标 ID_EDIT_RECT 编辑椭圆坐标 ID_EDIT_CIRCLE,4.2,步骤2 显示快捷菜单,添加响应函数Class Name ObjectsIDs MessagesCMainFrame CMainFrame WM_CONTEXTMENU,4.2,void CMainFrame:OnContextMenu(CWnd*pWnd,CPoint point)/TODO:Add your mes

10、sage handler code hereCMenu menu;if(menu.LoadMenu(IDR_POPUP_MENU)CMenu*pPopup=menu.GetSubMenu(0);pPopup-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);,步骤2 显示快捷菜单,4.2,步骤3 添加菜单消息处理函数,(1)编辑对话框资源,静态文本框,IDC_STATIC,左上角坐标(X1,Y1)静态文本框,IDC_STATIC,右下角坐标(X2,Y2)编辑框,IDC_EDIT_X1编辑框,IDC_EDIT_Y

11、1编辑框,IDC_EDIT_X2编辑框,IDC_EDIT_Y2按扭控件,IDOK,确定按扭控件,IDCANCEL,取消,4.2,步骤3 添加菜单消息处理函数,(2)为对话框添加控件关联变量 IDC_EDIT_X1,int,m_nX1IDC_EDIT_Y1,int,m_nY1IDC_EDIT_X2,int,m_nX2IDC_EDIT_Y2,int,m_nY2(3)在主框架中加入变量并初始化 int m_nRectLeft;int m_nRectTop;int m_nRectRight;int m_nRectBottom;int m_nCircleLeft;int m_nCircleTop;int

12、 m_nCircleRight;int m_nCircleBottom;,4.2,CMainFrame:CMainFrame()/TODO:add member initialization code herem_nRectLeft=50;m_nRectTop=50;m_nRectRight=200;m_nRectBottom=150;m_nCircleLeft=50;m_nCircleTop=50;m_nCircleRight=200;m_nCircleBottom=150;,步骤3 添加菜单消息处理函数,4.2,void CMenuTestView:OnDrawRect()CMainFra

13、me*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();CClientDC dc(this);dc.Rectangle(pMainFrame-m_nRectLeft,pMainFrame-m_nRectTop,pMainFrame-m_nRectRight,pMainFrame-m_nRectBottom);void CMenuTestView:OnDrawCircle()CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();CClientDC dc(this);dc.Ellips

14、e(pMainFrame-m_nCircleLeft,pMainFrame-m_nCircleTop,pMainFrame-m_nCircleRight,pMainFrame-m_nCircleBottom);,步骤3 添加菜单消息处理函数,(4)修改画图函数,4.2,步骤3 添加菜单消息处理函数,(5)加入菜单消息处理函数,void CMenuTestView:OnEditRect()CDlgEdit dlg(1);dlg.DoModal();void CMenuTestView:OnEditCircle()CDlgEdit dlg(2);dlg.DoModal();,4.2,步骤4 实现对

15、话框功能,(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_INITm_nType=type;,(2)添加确定命令按扭响应函数OnOK(),4.2,步骤4 实现对话框功能,void CDlgEdit:OnOK()UpdateData(TRUE);CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-

16、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)pMainFrame-m_nCircleLeft=m_nX1;pMainFrame-m_nCircleTop=m_nY1;pMainFrame-m_nCircleRight=m_nX2;pMainFrame-m_nCircleBottom=m_nY2;CDialog:OnOK

17、();,4.2,基本知识,OnContextMenu()函数 CMenu类(1)LoadMenu()函数:载入菜单资源(2)TrackPopupMenu()函数:在指定位置弹出菜单。AfxGetApp()函数CWinApp 类的GetMainWnd()函数,4.2,形式参数说明,4.3 动态菜单,学习目标1.菜单动态增加与删除2.用户自定义消息3.动态菜单消息响应,4.3,返回第4章,程序的实现步骤,编辑菜单资源添加菜单响应函数加入动态菜单响应函数,4.3,步骤1 编辑菜单资源,为菜单(IDR_POPUP_MENU)添加两个菜单项:Caption ID1.Seprator2.增加椭圆控制菜单

18、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=允许画椭圆;menu1=禁止画椭圆;CWnd*pMainFrame=AfxGetMainWnd();CMenu*pMenuDyna=NULL;CMenu*pMenu=NULL;CMenu*pTopMenu=pMai

19、nFrame-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 code hereCWnd*pMainFrame=AfxGetMainWnd();CMenu*pMenuDyna=NULL;CMenu*pMenu=NULL;CMenu*pTopMenu=pMainFram

20、e-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时,第一项为选中状态,允许画椭圆。否则第二项为选中状态,禁止画椭圆。,4.3,CMainFrame:CMainFrame()/TODO:add member initialization code herem_SelectMenu=

21、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,AFX_CMDHANDLERINFO*pHandlerInfo)if(pHandlerInfo=NULL)for(int i=0;i2;i+)if(nID=(UINT)(WM_USER+10+i)if(nCo

22、de=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.在CMainFrame类中增加两个函数DoSelectMenu()DoUpdateSelectMenu(),4.3,void CMainFrame:DoSelectMenu(int i)m_nSelectMenu=i;,

23、步骤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_UI消息处理函数,4.3,void CMainFrame:OnUpdateDrawCircle(CCmdUI*pCmdUI)/TODO:Add your command update UI handler c

24、ode hereif(m_nSelectMenu=0)pCmdUI-Enable(true);elsepCmdUI-Enable(false);,基本知识,CWnd 类:GetMenu()函数 CMenu类(1)GetMenuItemCount()函数(2)GetMenuItemID()函数(3)DeleteMenu()函数(4)AppendMenu()函数OnCmdMsg消息,4.3,工 具 栏,工 具 栏,工具栏还具有工具提示功能,当用户将鼠标光标停留在对应工具按钮上几秒钟,工具提示便会出现在工具栏按钮下方的文本框中。向工具栏添加按钮 添加工具栏间隔,工 具 栏,删除工具栏按钮 设置按钮属

25、性 启用和禁用工具栏按钮,向工具栏添加按钮,向工具栏添加按钮,Visual C+中主要体现为绘制工具栏按钮的位图,该位图以BMP文件格式保存。工具栏位图是一系列覆盖工具栏按钮的图形,每个按钮对应一个图形。在默认状态下,每个图形为16像素宽,15像素高。,向工具栏添加按钮,添加工具栏间隔,工具栏中的按钮从功能上可分为几大类,为了进行区别,往往在不同的类别之间使用间隔符号进行隔离。为工具栏添加间隔的方法非常简单,只需选择空白工具栏按钮,并轻轻向右拖动一点,即为工具栏添加了一个间隔。,删除工具栏按钮,AppWizard自动生成的工具栏按钮,在实际应用程序中可能会显得多余,这时可将其删除。,设置按钮属

26、性,工具栏按钮也有自己的属性,其属性在“Toolbar Button Properties”对话框中进行设置,双击对应的工具栏按钮,打开属性对话框。,设置按钮属性,对话框中各选项的含义如下:“ID”下拉列表框:输入或选择与按钮对应的ID号。“D宽”文本框:按钮显示的宽度,单位为“像素”,默认值为16。,设置按钮属性,“H高”文本框:按钮显示的高度,单位为“像素”,默认值为15。“M提示”文本框:输入的信息会在程序运行时在状态栏中进行显示。【例6-8】为【例6-7】中的工具栏按钮编辑属性。(光盘:第6章例6_16_10),启用和禁用工具栏按钮,与菜单项操作一样,用户没有为工具栏按钮写入消息处理函

27、数或者用户自定义按钮未与某个已有消息处理函数的菜单项对应时,工具栏按钮为灰色,即禁用状态。同样,也可在类中添加一个用户界面处理函数,根据应用程序的某些条件,可有条件地启用和禁用一个工具栏按钮。,4.4 工具条,学习目标1.自定义工具条在工具条中添加控件,4.4,返回第4章,程序的实现步骤,编辑工具条资源创建工具条 在工具条上添加控件加入控件响应函数,4.4,步骤1 编辑工具条资源,添加工具条(IDR_MYTOOLBAR):,4.4,ID_DRAW_RECT,ID_DRAW_CIRCLE,ID_DRAW_LINE,ID_COMBOBOX,工具条含四个工具按扭,其中前两个与菜单“画图”的前两个菜单

28、项的ID号相同,第三个按扭用于画直线,第四个按扭用来显示组合框。,步骤2 创建工具条,在类CmainFrame中定义工具条数据成员:CToolBar m_wndMyToolBar;在类CMainFrame的OnCreate函数中加入以下代码:,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)

29、TRACE0(Failed to create toolbarn);return-1;/fail to create.m_wndMyToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(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)

30、;,步骤3 在工具条上添加控件,在类CMainFrame中定义数据成员CComboBox m_ComboBox;2.在CMainFrame的OnCreate函数中加入代码,4.4,CRect rect;m_wndMyToolBar.SetButtonInfo(3,ID_COMBOBOX,TBBS_SEPARATOR,160);m_wndMyToolBar.GetItemRect(3,步骤4 加入组合框响应函数,定位到MainFrm.h中类的定义处,在其中添加消息响应函数的原形:afx_msg void OnSelchangeCombo();定位到MainFrm.cpp中消息映射宏的定义处,在其

31、中添加ComboBox控件的ON_CBNSELCHANGE消息的映射宏:ON_CBN_SELCHANGE(ID_COMBOBOX,OnSelchangeCombo),4.4,步骤4 加入组合框响应函数,3.在MainFrm.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_O

32、K|MB_ICONINFORMATION);,基本知识,CToolBar 类:CreateEx()函数 SetButtonInfo()GetItemRect()CComboBox 类 Create()函数AddString()函数SetCurSel()函数手工添加消息响应函数,4.4,3.5 状态条,学习目标1.在状态信息行显示信息 在状态指示器 显示键盘状态,4.5,返回第4章,程序的实现步骤,在文件MainFrm.cpp中,找到状态条indicators数组的定义处添加代码 创建Ctrl键和Shift键状态指示器的字符串资源 为状态条添加标识号 在函数CMainFrame:OnCreate

33、()函数中,添加状态条的设置代码 显示控制键状态 显示鼠标在视中的位置坐标,4.5,步骤1 在indicators数组中添加新元素,4.5,static UINT indicators=ID_SEPARATOR,/status 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键状

34、态指示器的字符串资源,4.5,在Workspace窗口中双击ResourceView标签的String Table,打开字符串资源编辑器。选中一个以ID_INDICATOR为开头的字符串资源,按Insert键,插入两个新的字符串资源:ID CaptionID_INDICATOR_CTRL CtrlID_INDICATOR_SHIFT Shift,步骤3 为状态条添加标识号,通过菜单View下的Resource Symbols菜单项,打开Resource Symbol对话框,单击New按扭,在Name中输入IDC_STATUSBAR,Value取默任值,单击OK按扭。,步骤4 在函数CMainF

35、rame:OnCreate()函数中,添加状态条的设置代码,4.5,if(!m_wndStatusBar.Create(this)|!m_wndStatusBar.SetIndicators(indicators,sizeof(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

36、,SBPS_POPOUT,50);,步骤5 显示控制键状态,4.5,1.在MainFrm.h文件中的类定义内加入消息响应函数的原形,并将成员m_wndStatusBar改成公用类型:,public:CStatusBar m_wndStatusBar;afx_msg void OnUpdateKeyCtrl(CCmdUI*pCmdUI);afx_msg void OnUpdateKeyShift(CCmdUI*pCmdUI);,2.在文件MainFrm.cpp消息映射宏的定义处添加两消息映射宏,ON_UPDATE_COMMAND_UI(ID_INDICATOR_CTRL,OnUpdateKeyC

37、trl)ON_UPDATE_COMMAND_UI(ID_INDICATOR_SHIFT,OnUpdateKeyShift),步骤5 显示控制键状态,4.5,3.在文件MainFrm.cpp中添加消息映射函数体,void CMainFrame:OnUpdateKeyCtrl(CCmdUI*pCmdUI)pCmdUI-Enable(:GetKeyState(VK_CONTROL)Enable(:GetKeyState(VK_SHIFT)0);,步骤6 显示鼠标在视中的位置坐标,4.5,在类CMenuTestView中添加鼠标移动消息响应函数,void CMenuTestView:OnMouseMo

38、ve(UINT nFlags,CPoint point)/TODO:Add your message handler code here and/or call defaultchar PositionString20;CMainFrame*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号