快捷键和控制条

上传人:无*** 文档编号:171545608 上传时间:2022-11-27 格式:PPT 页数:77 大小:452KB
收藏 版权申诉 举报 下载
快捷键和控制条_第1页
第1页 / 共77页
快捷键和控制条_第2页
第2页 / 共77页
快捷键和控制条_第3页
第3页 / 共77页
资源描述:

《快捷键和控制条》由会员分享,可在线阅读,更多相关《快捷键和控制条(77页珍藏版)》请在装配图网上搜索。

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

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

3、辑菜单项的属性 n在为菜单项添加名称时,系统已经自动打开一个名为“Menu Item Properties”的对话框。输入的菜单项名称将会出现在“标题”文本框处。菜单项属性对话框 编辑菜单项的属性编辑菜单项的属性n该对话框中各选项的含义分别是:n“ID”文本框:菜单项的唯一标识,可由系统生成,也可由用户自定义。n“标题”文本框:用户可见的菜单项名称。编辑菜单项的属性编辑菜单项的属性复选框:相应的菜单项被一条水平分隔线分隔。复选框:相应菜单项前显示选中标记。复选框:相应菜单项含有弹出式子菜单。复选框:菜单被禁用。编辑菜单项的属性编辑菜单项的属性n“暂停”下拉列表框:选中相应菜单后就退出其所在的菜

4、单。n“提示”文本框:鼠标移动到相应菜单处时,在窗口状态栏会出现提示信息。复选框:相应菜单没有被激活,用户不能选用。复选框:相应菜单在程序运行时置于顶层菜单的最右端。例题分析例题分析学习目标1.响应菜单消息2.控制菜单状态3.使用快捷键返回第4章程序的实现步骤程序的实现步骤 步骤步骤1 生成程序框架生成程序框架(MenuTest)1.项目名称:MenuTest2.选择单文档界面应用程序(Single document)步骤步骤2 编辑资源编辑资源步骤步骤3 加入菜单消息处理函数加入菜单消息处理函数 Class Name Objects IDs Messages步骤步骤4 菜单命令的更新控制菜单

5、命令的更新控制 1.在画图 菜单中再添加两个菜单项Caption ID Prompt 允许画矩形 ID_DRAW_ENABLE -禁止画矩形 ID_DRAW_DISABLE -步骤步骤4 菜单命令的更新控制菜单命令的更新控制 4.添加 菜单响应函数Class Name Objects IDs Messages步骤步骤4 菜单命令的更新控制菜单命令的更新控制基本知识基本知识1、pCmdUI-Enable(true|false);说明:使用户界面对象有效或无效2、pCmdUI-SetCheck(1|0);说明:设置或取消选中用户界面对象3、使用COMMAND消息响应菜单项的选择事件 4、UPDAT

6、E_COMMAND_UI消息控制菜使用单项状态 4.2 快捷菜单快捷菜单 学习目标1.实现快捷菜单返回第4章程序的实现步骤程序的实现步骤1、编辑快捷菜单资源2、显示跟踪菜单3、添加菜单响应函数4、实现对话框功能步骤步骤1 编辑快捷菜单资源编辑快捷菜单资源步骤步骤2 显示快捷菜单显示快捷菜单添加响应函数Class Name ObjectsIDs MessagesCMainFrame CMainFrame WM_CONTEXTMENU 步骤步骤2 显示快捷菜单显示快捷菜单步骤步骤3 添加菜单消息处理函数添加菜单消息处理函数(1)静态文本框,静态文本框,IDC_STATIC,左上角坐标(,左上角坐标

7、(X1,Y1)静态文本框,静态文本框,IDC_STATIC,右下角坐标(,右下角坐标(X2,Y2)编辑框,编辑框,IDC_EDIT_X1编辑框,编辑框,IDC_EDIT_Y1编辑框,编辑框,IDC_EDIT_X2编辑框,编辑框,IDC_EDIT_Y2按扭控件,按扭控件,IDOK,确定,确定按扭控件,按扭控件,IDCANCEL,取消,取消 步骤步骤3 添加菜单消息处理函数添加菜单消息处理函数(2)为对话框添加控件关联变量步骤步骤3 添加菜单消息处理函数添加菜单消息处理函数 CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();CM

8、ainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();步骤步骤3 添加菜单消息处理函数添加菜单消息处理函数(4)修改画图函数步骤步骤3 添加菜单消息处理函数添加菜单消息处理函数(5)加入菜单消息处理函数 void CMenuTestView:OnEditRect()CDlgEdit dlg(1);dlg.DoModal();void CMenuTestView:OnEditCircle()CDlgEdit dlg(2);dlg.DoModal();步骤步骤4 实现对话框功能实现对话框功能(1)修改构造函数 CDlgEdit:CDlg

9、Edit(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 实实现现对对话话框框功功能能void CDlgEdit:OnOK()UpdateData(TRUE);CMainFrame*pMainFrame=(CMainFrame*)AfxGetApp()-GetMainWnd();if(m_nType=1)

10、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();基本知识基本知识1.OnConte

11、xtMenu()函数 形式参数说明形式参数说明学习目标1.菜单动态增加与删除2.用户自定义消息3.动态菜单消息响应返回第4章程序的实现步骤程序的实现步骤1.编辑菜单资源2.添加菜单响应函数3.加入动态菜单响应函数步骤步骤1 编辑菜单资源编辑菜单资源为菜单(IDR_POPUP_MENU)添加两个菜单项:步骤步骤2 添加菜单响应函数添加菜单响应函数1.OnAddMenu()2.OnDeleteMenu()步骤步骤2 添加菜单响应函数添加菜单响应函数void CMainFrame:OnAddMenu()/TODO:Add your command handler code hereCString m

12、enu2;menu0=允许画椭圆;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&pMenu-GetMenuItemID(0)=ID_DRAW_RECT)pMenuDyna=pMenu;break;for(i

13、Pos=pMenuDyna-GetMenuItemCount()-1;iPos=5;iPos-)pMenuDyna-DeleteMenu(iPos,MF_BYPOSITION);for(int i=0;iAppendMenu(MF_STRING,WM_USER+10+i,menui);步骤步骤2 添加菜单响应函数添加菜单响应函数void CMainFrame:OnDeleteMenu()/TODO:Add your command handler code hereCWnd*pMainFrame=AfxGetMainWnd();CMenu*pMenuDyna=NULL;CMenu*pMenu=

14、NULL;CMenu*pTopMenu=pMainFrame-GetMenu();int iPos;for(iPos=pTopMenu-GetMenuItemCount()-1;iPos=0;iPos-)pMenu=pTopMenu-GetSubMenu(iPos);if(pMenu&pMenu-GetMenuItemID(0)=ID_DRAW_RECT)pMenuDyna=pMenu;break;for(iPos=pMenuDyna-GetMenuItemCount()-1;iPos=5;iPos-)pMenuDyna-DeleteMenu(iPos,MF_BYPOSITION);步骤步骤3

15、 添加动态菜单响应函数添加动态菜单响应函数1.在类CMainFrame中增加一个变量并初始化CMainFrame:CMainFrame()/TODO:add member initialization code herem_SelectMenu=0;步骤步骤3 添加动态菜单响应函数添加动态菜单响应函数2.重载主框架类的OnCmdMsg()函数 Project:MenuTestClass Name:CMainFrameObjects IDs:CMainFrameMessages:OnCmdMsg步骤步骤3 添加动态菜单响应函数添加动态菜单响应函数BOOL CMainFrame:OnCmdMsg(

16、UINT nID,int nCode,void*pExtra,AFX_CMDHANDLERINFO*pHandlerInfo)if(pHandlerInfo=NULL)for(int i=0;iSetCheck(1);elsepCmdUI-SetCheck(0);pCmdUI-Enable(true);步骤步骤3 添加动态菜单响应函数添加动态菜单响应函数4.为椭圆菜单项加入UPDATE_COMMAND_UI消息处理函数 void CMainFrame:OnUpdateDrawCircle(CCmdUI*pCmdUI)/TODO:Add your command update UI handle

17、r code hereif(m_nSelectMenu=0)pCmdUI-Enable(true);elsepCmdUI-Enable(false);基本知识基本知识1.CWnd 类:GetMenu()函数 工工 具具 栏栏 工具栏是使用频率较高的菜单项的图形化表示,放置在菜单栏下方,其形象的图标形式对应了相应的操作功能。如 Windows窗口中经常看到的,分别代表常用的“新建”,“打开”和“保存”操作。工工 具具 栏栏n工具栏还具有工具提示功能,当用户将鼠标光标停留在对应工具按钮上几秒钟,工具提示便会出现在工具栏按钮下方的文本框中。工工 具具 栏栏n删除工具栏按钮 n设置按钮属性 n启用和禁

18、用工具栏按钮 向工具栏添加按钮向工具栏添加按钮n向工具栏添加按钮,Visual C+中主要体现为绘制工具栏按钮的位图,该位图以BMP文件格式保存。工具栏位图是一系列覆盖工具栏按钮的图形,每个按钮对应一个图形。在默认状态下,每个图形为16像素宽,15像素高。向工具栏添加按钮向工具栏添加按钮【例 6-7】为【例 6-6】添加工具栏,其中圆形对应工具栏按钮;矩形对应工具栏按钮;直线对应工具栏按钮。(光盘:第 6 章例 6_16_10)添加工具栏间隔添加工具栏间隔 n工具栏中的按钮从功能上可分为几大类,为了进行区别,往往在不同的类别之间使用间隔符号进行隔离。n为工具栏添加间隔的方法非常简单,只需选择空

19、白工具栏按钮,并轻轻向右拖动一点,即为工具栏添加了一个间隔。删除工具栏按钮删除工具栏按钮 nAppWizard自动生成的工具栏按钮,在实际应用程序中可能会显得多余,这时可将其删除。设置按钮属性设置按钮属性 n工具栏按钮也有自己的属性,其属性在“Toolbar Button Properties”对话框中进行设置,双击对应的工具栏按钮,打开属性对话框。工具栏按钮属性对话框 设置按钮属性设置按钮属性n对话框中各选项的含义如下:设置按钮属性设置按钮属性n“H高”文本框:按钮显示的高度,单位为“像素”,默认值为15。n“M提示”文本框:输入的信息会在程序运行时在状态栏中进行显示。启用和禁用工具栏按钮启

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

21、工具按扭,其中前两个与菜单“画图”的前两个菜单项的ID号相同,第三个按扭用于画直线,第四个按扭用来显示组合框。步骤步骤2 创建工具条创建工具条1.在类CmainFrame中定义工具条数据成员: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 toolba

22、rn);return-1;/fail to create.m_wndMyToolBar.EnableDocking(CBRS_ALIGN_ANY);EnableDocking(CBRS_ALIGN_ANY);DockControlBar(&m_wndMyToolBar);步骤步骤2 创建工具条创建工具条3.添加画线响应函数 void CMenuTestView:OnDrawLine()/TODO:Add your command handler code hereCClientDC dc(this);dc.MoveTo(20,20);dc.LineTo(200,200);步骤步骤3 在工具条上

23、添加控件在工具条上添加控件 1.在类CMainFrame中定义数据成员CRect rect;m_wndMyToolBar.SetButtonInfo(3,ID_COMBOBOX,TBBS_SEPARATOR,160);m_wndMyToolBar.GetItemRect(3,&rect);rect.bottom+=100;if(!m_ComboBox.Create(CBS_DROPDOWNLIST|WS_VISIBLE|WS_TABSTOP|CBS_AUTOHSCROLL,rect,&m_wndMyToolBar,ID_COMBOBOX)return-1;m_ComboBox.AddStrin

24、g(First Item);m_ComboBox.AddString(Second Item);m_ComboBox.AddString(Third Item);m_ComboBox.SetCurSel(0);步骤步骤4 加入组合框响应函数加入组合框响应函数 1.定位到MainFrm.h中类的定义处,在其中添加消息响应函数的原形:步骤步骤4 加入组合框响应函数加入组合框响应函数 3.在MainFrm.cpp中添加消息映射函数体:void CMainFrame:OnSelchangeCombo()CString mess;int CurSel;CurSel=m_ComboBox.GetCurSe

25、l();mess=您选择了第;char No3;itoa(CurSel,No,10);mess+=No;mess+=项!;MessageBox(mess,消息框,MB_OK|MB_ICONINFORMATION);基本知识基本知识1.CToolBar 类:1.CreateEx()函数 2.SetButtonInfo()3.GetItemRect()学习目标1.在状态信息行显示信息 返回第4章程序的实现步骤程序的实现步骤1.在文件MainFrm.cpp中,找到状态条indicators数组的定义处添加代码 2.创建Ctrl键和Shift键状态指示器的字符串资源 3.为状态条添加标识号 4.在函数

26、CMainFrame:OnCreate()函数中,添加状态条的设置代码 5.显示控制键状态 6.显示鼠标在视中的位置坐标 步骤步骤1 在在indicators数组中添加新元素数组中添加新元素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_INDICATO

27、R_NUM,ID_INDICATOR_SCRL,;步骤步骤2 创建创建Ctrl键和键和Shift键状态指示器的字符串资键状态指示器的字符串资源源 在Workspace窗口中双击ResourceView标签的String Table,打开字符串资源编辑器。选中一个以ID_INDICATOR为开头的字符串资源,按Insert键,插入两个新的字符串资源:ID CaptionID_INDICATOR_CTRL CtrlID_INDICATOR_SHIFT Shift 步骤3 为状态条添加标识号 通过菜单View下的Resource Symbols菜单项,打开Resource Symbol对话框,单击N

28、ew按扭,在Name中输入IDC_STATUSBAR,Value取默任值,单击OK按扭。步骤步骤4 在函数在函数CMainFrame:OnCreate()函数中,()函数中,添加状态条的设置代码添加状态条的设置代码 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(

29、1,IDC_STATUSBAR,SBPS_POPOUT,50);m_wndStatusBar.SetPaneInfo(2,IDC_STATUSBAR,SBPS_POPOUT,50);步骤步骤5 显示控制键状态显示控制键状态 1.在MainFrm.h文件中的类定义内加入消息响应函数的原形,并将成员m_wndStatusBar改成公用类型:public:CStatusBar m_wndStatusBar;afx_msg void OnUpdateKeyCtrl(CCmdUI*pCmdUI);afx_msg void OnUpdateKeyShift(CCmdUI*pCmdUI);2.在文件Main

30、Frm.cpp消息映射宏的定义处添加两消息映射宏 ON_UPDATE_COMMAND_UI(ID_INDICATOR_CTRL,OnUpdateKeyCtrl)ON_UPDATE_COMMAND_UI(ID_INDICATOR_SHIFT,OnUpdateKeyShift)步骤步骤5 显示控制键状态显示控制键状态 3.在文件MainFrm.cpp中添加消息映射函数体 void CMainFrame:OnUpdateKeyCtrl(CCmdUI*pCmdUI)pCmdUI-Enable(:GetKeyState(VK_CONTROL)Enable(:GetKeyState(VK_SHIFT)m_wndStatusBar.SetPaneText(1,PositionString);sprintf(PositionString,y:%d,point.y);MainFrame-m_wndStatusBar.SetPaneText(2,PositionString);CView:OnMouseMove(nFlags,point);基本知识基本知识1.CStatusBar 类:1.SetPaneInfo()函数 2.SetIndicators()函数3.SetPaneText()函数返回第4章

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!