面向对象的程序设计语言——C.pptx

上传人:莉*** 文档编号:87115063 上传时间:2023-04-16 格式:PPTX 页数:74 大小:267.68KB
返回 下载 相关 举报
面向对象的程序设计语言——C.pptx_第1页
第1页 / 共74页
面向对象的程序设计语言——C.pptx_第2页
第2页 / 共74页
点击查看更多>>
资源描述

《面向对象的程序设计语言——C.pptx》由会员分享,可在线阅读,更多相关《面向对象的程序设计语言——C.pptx(74页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、1创建菜单可以有几种方法,最简单的方法是用菜单资源编辑器进行设计。在这里,我们把第五章关于模式对话框的例子进行改造,使对话框的弹出方式由在窗口中双击鼠标改为由单击某个菜单命令实现。具体步骤如下:步骤一:在VisualC+6.0中,选【File】菜单中的【OpenWorkspace】菜单项,打开已创建的“Dialog.dsw”文件。步骤二:在工作区窗口中选择【ResourceView】选项卡,展开【DialogResources】目录,再展开【Menu】文件,将会看到菜单IDR_MAINFRAME。步骤三:双击IDR_MAINFRAME,将在菜单资源编辑器中打开菜单资源。步骤四:在主菜单中增加一

2、个【显示】菜单。用鼠标双击主菜单最右边的空菜单项,或者用鼠标右击,在弹出的快捷菜单中选择【Properties】菜单项。系统将弹出属性对话框。第1页/共74页2在【Caption】栏中输入“显示(&P)”,括号中的&P表示紧跟在它后面的字母“P”是助记符,这样,在程序运行过程中,就可以用Alt+P键来激活【显示】菜单。按【Enter】键继续。这时,在主菜单中将增加一个“显示”菜单,在助记符P下面有下划线。同时,在生成的菜单的右面和下面各出现一个新的菜单或菜单项,可以继续添加新的菜单或菜单项。步骤五:在【显示】菜单中增加一个【个人资料】菜单项。用鼠标右键单击【显示】菜单中的空菜单项,在弹出菜单中

3、选择【Properties】选项。单击属性对话框左上角的“图钉”按钮,把对话框“钉”在屏幕上。在属性对话框的【Caption】栏中输入“个人资料(&D)”。第2页/共74页3对于【个人资料】菜单项,VisualC+6.0将为该菜单项自动分配一个ID号。单击其他菜单项或者屏幕的其他部分,再选中【个人资料】菜单项,系统在【ID】栏中显示出为该菜单项分配的ID号,其一般格式 为 MENUITEMxxxxx(xxxxx代 表 一 个 整 数)。【Prompt】框中的文本是光标处于菜单项时,状态栏显示的帮助信息在菜单项属性对话框的【General】选项卡中,各选项的含义如下图所示。步骤六:用鼠标左键按住

4、【显示】菜单,将其拖到【编辑】与【帮助】菜单中间。这样,利用菜单资源编辑器,我们就很轻松地创建了一个标准的Windows菜单。第3页/共74页4项目含义IDCaptionSeparatorCheckedPop_upGrayedInactiveHelpBreakPrompt 菜单的资源ID号菜单项的标题文本,当其中某一字母的前面含有&符号时,则该字母与Alt键构成组合键选中时,则相应的菜单项是一个分隔符或一条水平线选中时,则相应的菜单项前显示一个选中标记“”选中时,表示该菜单项含有弹出式子菜单选中时,表示该菜单项呈灰色显示,该菜单项被禁用选中时,表示该菜单项没有被激活,用户不能选用选中时,表示该

5、菜单项在程序运行时被放于顶层菜单的最右端其默认值为None,表示菜单项按常规形式显示。该项的取值还可为Column或Bar,指明当光标移到该菜单项时在状态栏上显示的提示表6.1 菜单General属性对话框的各项含义 第4页/共74页52.建立快捷键在Windows应用程序中的某些菜单项后面有一个组合键,表示一个快捷键(shortcutkey),在程序运行过程中,如果用户按下了该组合键,则相应的菜单命令就会被执行。当然,若要使用快捷键选择某个菜单项,就必须事先对其作出定义。现在我们来为刚才创建的菜单添加快捷键,具体步骤如下:步骤一:在工作区窗口的【ResourceView】选项卡 中,双 击【

6、Accelerator】文 件 夹,双 击IDR_MAINFRAME,则系统会弹出一个加速器表。步骤二:在加速器表中浏览一下,发现Ctrl+D还没有被使用,我们就把Ctrl+D设置为菜单项【个人资料】的快捷键。方法是双击加速器表末尾的空行,将弹出快捷键的属性对话框(AccelProperties)。第5页/共74页6 在属性对话框(Accel Properties)中,各项的含义如表6.2所示。表6.2 Accel Properties对话框中各选项的含义选项 含义 IDModifiersTypeKeyNext Key Typed 为了能使设定的快捷键与某个菜单项的功能相对应,从中选择所需的菜

7、单资源ID号用来选择Ctrl、Alt、Shift键是否为快捷键的组成键用来确定快捷键的值是虚拟键(VirKey)还是ASCII是指启动快捷键的键盘按键单击此按钮时,用户所按的任何按键将成为快捷键的键值 第6页/共74页7步骤三:在对话框中的【ID】下拉列表中选择【ID_DISPLAY_DATA】选项,当选中ID号时,【ID】框 中 同 时 显 示 出 此 ID号 对 应 的 整 数,如ID_DISPLAY_DATA=32771。步骤四:在【Key】列表框中输入“D”,确认【Modifiers】栏中的【Ctrl】复选框被选中,而且【Alt】和【Shift】都未被选中;或者,直接单击【NextKe

8、yTyped】按钮,按下Ctrl+D组合键放开,此时系统会自动记录所按下的Ctrl+D键为所要设定的组合键。按【Enter】键继续。步骤五:为了在【显示】菜单中提示【个人资料】菜单项的快捷键,可以返回6.1.1节中的步骤五,将【Caption】框 中 的 内 容 修 改 为“个 人 资 料(D)tCtrl+D”。这样,我们就建立了一个完整的菜单资源。第7页/共74页83 菜单功能的实现在MFC框架中,菜单命令消息是按照一定的顺序进行传递的。对于一个单文档应用程序,消息传递的顺序为:视图类文档类框架类应用程序类。因此,如果我们在视图类和文档类中同时定义了某个菜单项的消息映射接口时,由于消息首先传

9、递给视图类,在视图类中对此消息做出了响应,所以,文档类中定义的此菜单项的消息映射函数就无法执行。在菜单资源中,我们定义了MFC如何来构造菜单的结构,同时还指定了菜单的资源ID号,MFC通过ClassWizard会自动把菜单和相应的框架窗口联系在一起。但除了由系统产生的少量代码外,MFC不能自动地对程序的菜单项进行响应,必须用手工实现。第8页/共74页9对于每个菜单项,系统提供了COMMAND和UPDATE_COMMAND_UI两种消息可供选择:(1)COMMAND消息需要用户的干预,如单击、双击等操作;(2)UPDATE_COMMAND_UI消息系统会自动进行响应,通过它可以实现对菜单项外观的

10、动态管理。例如,设计人员可以使菜单有效、无效或给菜单项动态添加检查标记等。可以利用ClassWizard同时设置这两种消息,但是 在 实 际 编 程 中,必 须 为 每 个 菜 单 项 提 供 有 关WM_COMMAND类型消息映射接口。下面,我们在视图类中对前面已建立的“个人资料(&D)”菜单项的消息做出响应。具体步骤如下:第9页/共74页10步骤一:选择【View】菜单中的【ClassWizard】菜单项,弹出【MFCClassWizard】对话框。步骤二:在【MFCClassWizard】对话框中,选择【MessageMaps】选项卡。在【Classname】下拉列表框中,选择类CDia

11、logView;在【ObjectIds】中单击选择ID_DISPLAY_DATA 选项;在【Messages】栏 中 将 出 现 COMMAND和 UPDATE_COMMAND_UI两个选项,选中其中的COMMAND。步骤三:单击对话框右侧的【AddFunction】按钮,系统将会弹出【AddMemberfunction】对话框。系 统 将 自 动 生 成 一 个 缺 省 名 称 为OnDisplayData的映射函数亦可另取别的名称,在此取缺省名称,单击【OK】按钮继续。步 骤 四:单 击【Edit Code】按 钮 退 出【MFCClassWizard】对 话 框,并 编 辑 新 增 加

12、的 函 数OnDisplayData。第10页/共74页11经过以上操作完成后,VisualC+会对程序中的一些程序文件的代码进行必要的修改,其中粗体部分的代码是由ClassWizard自动添加的代码。1.在CDialogView类的定义文件DialogView.h中的消息映射部分将会改变为:/Generatedmessagemapfunctionsprotected:/AFX_MSG(CDialogView)afx_msgvoidOnLButtonDblClk(UINTnFlags,CPointpoint);afx_msg void OnDisplayData();/ClassWizard自

13、动添加的/AFX_MSGDECLARE_MESSAGE_MAP();第11页/共74页12其中:/AFX_MSG(CDialogView)/AFX_MSG是ClassWizard分别用来识别命令消息处理函数定义的起始标记和结束标记,在AFX_MSG(CDialogView)后面括号内的CDialogView表示是处理该消息的类。2.在CDialogView类的实现文件DialogView.cpp中的消息映射部分也进行了一些修改:BEGIN_MESSAGE_MAP(CDialogView,CView)/AFX_MSG_MAP(CDialogView)第12页/共74页13ON_WM_LBUTTO

14、NDBLCLK()ON_COMMAND(ID_DISPLAY_DATA,OnDisplayData)/ClassWizard自动添加的/AFX_MSG_MAPEND_MESSAGE_MAP()其中:/AFX_MSG_MAP(CDialogView)/AFX_MSG_MAP是ClassWizard标识命令消息处理映射机制的起始标记和结束标记。第13页/共74页143.在DialogView.cpp文件中编写OnDisplayData函数的代码。把 DialogView.cpp文 件 中 响 应 双 击 窗 口 的 函 数 OnLButtonDBLCLK()的代码复制到OnDisplayData(

15、)函数中,具体代码如下:voidCDialogView:OnDisplayData()/TODO:Add your command handler codehereCMydataDialog dlg;dlg.m_radio_m=0;dlg.m_edit_name=;CString msg;if(dlg.DoModal()=IDOK)msg=按钮被按下!;Else msg=按钮被按下!;第14页/共74页15msg+=rn;msg+=姓名:;msg+=dlg.m_edit_name;msg+=rn;msg+=性别:;switch(dlg.m_radio_m)case 0:msg+=男;break

16、;case 1:msg+=女;break;msg+=rn;msg+=最高学历:;msg+=dlg.m_combo_school;msg+=rn;msg+=爱好:;第15页/共74页16if(dlg.m_check_art=TRUE)msg+=艺术;if(dlg.m_check_music=TRUE)msg+=音乐;if(dlg.m_check_sport=TRUE)msg+=体育;AfxMessageBox(msg);步骤五:编译运行并测试此应用程序。当选择【显示】菜单中的【个人资料】菜单项,或单击Ctrl+D键时,将弹出【个人资料】对话框,在对话框内可以进行各种设置,然后单击【确认】或【取消

17、】按钮退出。可以看到其效果与双击应用程序窗口是一样的。第16页/共74页174.CMenu类及其常用成员函数介绍VisualC+的MFC提供的菜单类Cmenu的对象可以用来表示各种Windows菜单,其中包括顶层菜单项及其相应的弹出式菜单。并且该类可以在程序运行时处理有关菜单的操作,如创建菜单、装入菜单、删除菜单项、获取或设置菜单项的状态等。创建菜单CMenu类的成员函数CreateMenu和CreatePopupMenu分别用来创建一个菜单或子菜单框架,其函数原型如下:BOOLCreateMenu();/产生一个空菜单BOOLCreatePopupMenu();/产生一个空弹出式子菜单第17

18、页/共74页18装入菜单CMenu类的成员函数LoadMenu可用来将菜单资源装入应用程序中,它的函数原型有两种,如下所示:BOOLLoadMenu(LPCTSTRlpszResourceName);BOOLLoadMenu(UNITnIDResource);其中:形参lpszResourceName表示菜单资源的名称,形参nIDResource为菜单资源的ID号。添加菜单项当菜单创建后,可以调用CMenu类提供的成员函数AppendMenu或InsertMenu来向菜单中添加一些菜单项,但每次添加时,函数AppendMenu是将菜单项添加在菜单的末尾处,而InsertMenu是在指定的位置处

19、插入菜单项,并将后面的菜单项依次下移。它们的函数原型如下:第18页/共74页19BOOLAppendMenu(UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLAppendMenu(UNITnFlags,UNITnIDNewItem=0,LPCTSTRlpszNewItem=NULL);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem,constCBitmap*pBmp);BOOLInsertMenu(UNITnPosition,UNITnFlags,UNITnIDNewItem=0,L

20、PCTSTRlpszNewItem=NULL);其中:形参nIDNewItem表示新增菜单项的资源ID号,形参lpszNewItem表示新增菜单项的标题内容,形参pBmp是新增菜单项的位图指针,形参nPosition表示新增菜单项要插入的菜单项的位置,nFlags表示要增加的菜单项的状态信息,其取值的不同会影响其他参数的含义,见表6.3。第19页/共74页20nFlags的取值含义nPosition值nIDNewItem值lpszNewItem值MF_BYCOMMANDMF_BYPOSITIONMF_POPUPMF_SEPARATORMF_OWNERDRAWMF_STRINGMF_CHECKE

21、DMF_UNCHECKEDMF_DISABLEDMF_ENABLEDMF_GRAYED 菜单项以ID号来标识菜单项以位置来标识菜单项有弹出式子菜单分隔线自画菜单项字符串标志设置菜单项的选中标记取消菜单项的选中标记禁用菜单项菜单项可用菜单项变灰 菜单项资源ID菜单项的位置弹出式菜单句柄忽略 忽略自画所需的数据字符串指针第20页/共74页21注意:(1)当形参nFlags为MF_BYPOSITION时,nPosition表示新菜单项要插入的位置,该位置为0时表示新菜单项插入到第一个菜单项,为1时表示新菜单项插入到第二个菜单项,当为-1时,表示新菜单项插入到菜单的末尾(2)在形参nFlags中,可以

22、用按位或运算符“|”将某些取值组合起来,如:MF_CHECKED|MF_STRING等。但有些组合是不允许的,如:MF_DISABLED、MF_ENABLED和MF_GRAYED等。(3)当利用以上函数向菜单中新增菜单后,不管菜单所在的窗口是否改变,都应调用CWnd类的成员函数CWnd:DrawMenuBar来更新菜单,函数DrawMenuBar的原型为:voidDrawMenuBar();第21页/共74页22删除菜单项当要删除指定的菜单项时,可利用CMenu类的成员函数DeleteMenu来完成,该函数的原型为:BOOLDeleteMenu(UNITnPosition,UNITnFlags

23、);其中:形参nPosition的值表示要删除的菜单项的位置,其值的选取要受到形参nFlags的取值的影响。当nFlags的取值为MF_BYCOMMAND时,nPosition表示要删除的菜单项的ID号,而当nFlags的取值为MF_BYPOSITION时,nPosition表示要删除的菜单项的位置(第一个菜单项的位置为0,第二个菜单项的位置为1,)。注意:当调用DeleteMenu函数删除某个菜单项后,不管菜单所依附的窗口是否改变,也必须调用CWnd类的成员函数CWnd:DrawMenuBar来更新菜单。第22页/共74页23获取菜单项可以利用CMenu类的以下三个成员函数分别获得菜单的项数

24、、菜单项的ID号以及弹出式子菜单的句柄。(1)GetMenuItemCount函数该函数的原型为:UNITGetMenuItemCount()const;该函数的功能是取得菜单中的菜单项数,如果调用失败则返回值为-1。(2)GetMenuItemID函数该函数的原型是:UNITGetMenuItemID(intnPos)const;该函数的功能是返回由参数nPos所指定的菜单项位置的菜单项的ID号,若nPos所指定的位置处为分隔线,则该函数的返回值为-1。第23页/共74页24(3)GetSubMenu函数该函数的原型为:CMenu*GetSubMenu(intnPos)const;该函数的功

25、能是获得指定菜单的弹出式菜单的菜单句柄。该弹出式菜单位置由参数nPos给定,开始的位置为0,若菜单不存在,则创建一个临时的菜单指针。此外,在主框架CMainFrame类中,可以利用该类的成员函数CMainFrame:GetMenu来获得主菜单句柄。该函数的原型为:CMenu*GetMenu();第24页/共74页255.5.快捷菜单的实现 利用MFC提供的CMenu类的TrackPopupMenu成员函数可以用来显示一个弹出式菜单,该函数的原型为:BOOLTrackPopupMenu(UNITnFlags,intx,inty,CWnd*pWnd,LPCRECTlpRect=0);其中:(1)形

26、参nFlags表示菜单在屏幕上显示的位置以及鼠标的按钮状态,具体见表6.4所示。其中前三个值可分别与后两个值用“|”运算符进行组合。nFlags的值含义及作用TPM_CENTERALIGNTPM_LEFTALIGNTPM_RIGHTALIGNTPM_LEFTBUTTONTPM_RIGHTBUTTON决定菜单的屏幕位置,水平中心位置由x坐标确定决定菜单的屏幕位置,菜单的左边位置由x坐标确定决定菜单的屏幕位置,菜单的右边位置由x坐标确定鼠标按钮标志,当用户单击左键时弹出快捷菜单鼠标按钮标志,当用户单击右键时弹出快捷菜单第25页/共74页26(2)形参x和y表示菜单的水平坐标和菜单的顶端的垂直坐标。

27、(3)pWnd表示弹出菜单的窗口,此窗口将收到菜单全部的WM_COMMAND消息。(4)lpRect是一个RECT结构或CRect类的对象指针,它表示一个矩形区域,用户单击这个区域时,弹出菜单不消失,而当lpRect为NULL时,则当用户单击菜单外面时,菜单会立刻消失。下面,我们在上例的基础上,添加一个快捷菜单,并使其能够完成与与双击应用程序窗口或选择【显示】菜单中的【个人资料】菜单项一样的功能。具体步骤如下:步骤一:在VisualC+6.0中,选择【File】菜单中的【OpenWorkspace】菜单项,打开上例中的“Dialog.dsw”第26页/共74页27步骤二:添加一个新的菜单资源。

28、选择【Insert】菜单中的【Resource】菜单项,或直接按Ctrl+R键,在打开的【InsertResource】对话框窗口中选择【Menu】,单击【New】按钮。步骤三:在工作区窗口中选择【ResourceView】选项卡,展开【DialogResources】目录,再展开【Menu】文件夹,将会看到菜单IDR_MENU1(这是 系 统 给 该 菜 单 资 源 的 缺 省 ID号)。双 击 IDR_MENU1,将在菜单资源编辑器中打开菜单资源。用鼠标双击主菜单最右边的空菜单项,或者用鼠标右键单击它,在弹出的快捷菜单中选择【Properties】菜单项。在出现的“MenuItemProp

29、erties”对话框中的【Caption】栏中任意输入一个标题,最后按回车键退出该对话框。第27页/共74页28步骤四:在快捷菜单中增加菜单项。在菜单资源编辑器中用鼠标右键单击【显示】菜单中的空菜单项,在出现的快捷菜单中选择【Properties】选项。在出现的“Menu Item Properties”属 性 对 话 框 的【Caption】栏中输入“个人资料(&D)”,ID号输入“ID_MENU1_DATA”,按回车键关闭“MenuItemProperties”对话框。以同样方法再增加一个【其他】菜单项,标题为“其他(&O)”,ID号为“_”。步骤五:选择【View】菜单中的【ClassW

30、izard】菜单项,将出现一对话框,询问是“创建一个新类(Createanewclass)”,还是“选择一个已存在的类(Selectanexistingclass)”,在此选择“选择一个已存在的类(Selectanexistingclass)”,则系统又弹出“SelectClass”对话框,在该对话框中,单击选择“CDialogView”,单击【Select】按钮,系统进入【MFCClassWizard】对话框。第28页/共74页29步骤六:在【MFCClassWizard】对话框中,选择【MessageMaps】选项卡。在【Classname】下拉列表框中,选择类CDialogView;在【

31、ObjectIds】中 选 择 ID_MENU1_DATA 选 项;在 【Messages】栏中选择COMMAND。步骤七:单击对话框右侧的【AddFunction】按钮,系统将会弹出【AddMemberfunction】对话框。系统将自动生成一个缺省名称为OnMenu1Data的映射函数,在此保留此默认名称,单击【OK】按钮继续。步 骤 八:单 击【Edit Code】按 钮 退 出【MFCClassWizard】对 话 框,并 编 辑 新 增 加 的 函 数OnMenu1Data。把 OnDisplayData()函 数 中 的 代码复制到OnMenu1Data()中,具体代码如下,其中粗

32、体字为新添加的代码:第29页/共74页30voidCDialogView:OnMenu1Data()/TODO:Add your command handler codehereCMydataDialog dlg;dlg.m_radio_m=0;dlg.m_edit_name=;CString msg;if(dlg.DoModal()=IDOK)msg=按钮被按下!;else msg=按钮被按下!;第30页/共74页31msg+=rnn;msg+=姓姓 名:名:;msg+=dlg.m_edit_name;msg+=rn;msg+=性性 别:别:;switch(dlg.m_radio_m)cas

33、e 0:msg+=男男;break;case 1:msg+=女女;break;msg+=rn;msg+=最高学历:最高学历:;msg+=dlg.m_combo_school;msg+=rn;msg+=爱爱 好:好:;第31页/共74页32if(dlg.m_check_art=TRUE)msg+=艺术;if(dlg.m_check_music=TRUE)msg+=音乐;if(dlg.m_check_sport=TRUE)msg+=体育;AfxMessageBox(msg);步骤九:选择【View】菜单中的【ClassWizard】菜单项.在出现的【MFCClassWizard】对话框中,选择【M

34、essageMaps】选项卡。在【Classname】下 拉 列 表 框 中,选 择 类 CMainFrame;在 【Object Ids】中 选 择 CMainFrame选 项;在 【Messages】栏中选择WM_CONTEXTMENU。单击对话框右侧的【AddFunction】第32页/共74页33按钮,系统将会弹出【AddMemberfunction】对 话 框。系 统 将 自 动 生 成 一 个 缺 省 名 称 为OnContextMenu的映射函数,单击【OK】按钮。单击【Edit Code】按钮退出【MFC ClassWizard】对话框,并对OnContextMenu函数进行如

35、下编辑:voidCMainFrame:OnContextMenu(CWnd*pWnd,CPointpoint)/TODO:Add your message handler codehereCMenu menu;menu.LoadMenu(IDR_MENU1);menu.GetSubMenu(0)-TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);第33页/共74页34步骤十:编译运行并测试此应用程序。当在应用程序窗口中,单击鼠标右键时,会弹出快捷菜单,选择其中的【个人资料】菜单项,则弹出【个人资料】对话框。在对

36、话框内可以进行各种设置,然后单击【确认】或【取消】按钮退出。可以看到其效果与双击应用程序窗口或选择【显示】菜单中的【个人资料】菜单项是一样的。6.动态向菜单中添加新的菜单项下面,我们在上例的基础上,向程序中动态增加一个新的菜单项,具体步骤如下:步骤一:在VisualC+6.0中,选择【File】菜单中的【OpenWorkspace】菜单项,打开上例中的【Dialog.dsw】文件。步 骤 二:选 择【View】菜 单 中 的【ResourceSymbols】菜单项,则会出现【Resource View】对话框。第34页/共74页35步骤三:单击对话框中【New】按钮,则出现“NewSymbol

37、”对话框。在该对话框中的Name文本框中,输入一个用于菜单项的ID号,如:在本例中输入“ID_NEW_MENUITEM”。在Value文本框中输入对在该ID号的ID值,系统缺省为101,用户也可以自行修改成新值,新值必须处在1561440之间。在此取系统默认值,单击【OK】按钮。步骤四:利用VisualC+的工作区窗口,打开CMainFrame类的实现文件MainFrm.cpp文件,在CMainFrame:OnCreate函数体中添加如下代码:intCMainFrame:OnCreate(LPCREATESTRUCTlpCreateStruct)/前一部分在此省略第35页/共74页36CMen

38、u*pMainMenu=GetMenu();CMenu*pSubMenu=pMainMenu-GetSubMenu(4);CString StrOfNewMenuItem(新建菜单项);pSubMenu-AppendMenu(MF_SEPARATOR);pSubMenu-AppendMenu (MF_STRING,ID_NEW_MENUITEM,StrOfNewMenuItem);m_bAutoMenuEnable=FALSE;pMainMenu-EnableMenuItem (ID_NEW_MENUITEM,MF_BYCOMMAND|MF_ENABLED);DrawMenuBar();ret

39、urn0;第36页/共74页37步骤五:选择【View】菜单中的【ClassWizard】菜单项,在出现的【MFCClassWizard】对话框中,选择【MessageMaps】选项卡。在【Classname】下拉列表框中,选择类CMainFrame;在【ObjectIds】中选择CMainFrame选项;在【Messages】栏中选择OnCommand。单击对话框右侧的【EditCode】按钮,系统将会进入CMainFrame:OnCommand编辑窗口,输入以下黑体部分代码:BOOLCMainFrame:OnCommand(WPARAMwParam,LPARAMlParam)/TODO:A

40、ddyourspecializedcodehereand/orcallthebaseclassif(LOWORD(wParam)=ID_NEW_MENUITEM)MessageBox(您选中了新的菜单项);returnCFrameWnd:OnCommand(wParam,lParam);此步中完成了对新增菜单项的消息映射功能。步骤六:编译运行并测试此应用程序。第37页/共74页386.2创建工具栏 工具栏是一系列工具按钮的组合,也是一种常用的命令输入方式。可以说,工具栏是菜单的一种快捷方式。1.创建工具栏的方法和步骤创建工具栏资源在这里,我们将对上一节的例子进行扩充,增加一个工具栏。当用鼠标选

41、择工具栏上的某个按钮时,显示出【个人资料】对话框。具体步骤如下:步骤一:打开上一节创建的Dialog例子。步骤二:在工作区窗口中选择【ResourceView】选项卡,展开【DialogResources】文件夹,由于我们在用AppWizard生成应用程序时,没有选择生成工具栏,因此在【DialogResources】文件夹中,找不到Toolbar文件夹。第38页/共74页39步骤三:选择【Insert】菜单中的【Resource】菜单项,在弹出菜单中选择【Insert】菜单项。系统将弹出【InsertResource】对话框,在对话框中选择【Toolbar】,单击【New】按钮。步骤四:系统

42、将自动在【DialogResounrces】文件夹中添加一个【Toolbar】文件夹,同时在【Toolbar】文件夹中添加了一个名为IDR_TOOLBAR1的文件。屏幕上同时显示工具栏设计窗口。步骤四:鼠标右键单击【ResourceView】中【Toolbar】文件夹中的IDR_TOOLBAR1项目。在弹出菜单中选择【Properties】菜单项,系统将弹出工具栏属性对话框。在属性对话框中的【ID】框中,我们把ID号修改为IDR_MYTOOLBAR。第39页/共74页40步骤五:添加按钮和制作按钮图标。我们可以利用【Graphic】和【Color】工具栏上提供的设计工具,根据自己需要制作按钮图

43、标。我们用字母R作为按钮的图标。工具栏按钮的绘制是一个个分开进行的,在画完一个按钮后,该按钮的实际效果立刻显示出来。在【Toolbar ButtonProperties】工具栏按钮属性对话框中,各项的含义如表6.5所示。项目含义IDWidthHeightPrompt用于输入或从下拉列表中选择工具栏按钮的ID号用于输入工具栏按钮的宽度,单位是像素用于输入工具栏按钮的高度,单位是像素工具栏按钮文本第40页/共74页41注:要使选择工具栏按钮的功能与选择菜单的功能一致时,应将工具栏按钮属性对象框中的ID号设置为与某一菜单项的ID号相同。值得一提的是,在创建工具栏按钮的过程中,可以进行有关的操作及方法

44、:(1)创建新的工具栏按钮在新建一个工具栏的过程中,在工具栏的右端会有一个空按钮,用鼠标单击该按钮,则该按钮的周围有虚的方框包围,同时在编辑区内显示出该按钮,用户可以在其中绘制图形。(2)移动工具栏中的按钮在编辑工具栏的过程中,可以根据用户的需要移动工具栏中的按钮,将某个按钮放置到所需要的位置上。第41页/共74页42(3)复制工具栏中的按钮在工具栏编辑窗口内,选择待移动的工具栏按钮,在按下Ctrl键的同时,将其拖动到所需要的位置。(4)删除工具栏中的按钮方法是用鼠标拖动该按钮到工具栏以外的位置。(5)在工具栏中的按钮间插入空格可以根据需要在某个按钮的左边、右边或两边插入一个空格分隔符,方法是

45、:如果某按钮左边没有任何空格,拖动该按钮向右移动并当按钮的右边界接触到右边按钮时,释放鼠标键,则可以此按钮的左边插入一个空格,反之,亦然。如果某按钮的左边已有空格而右边没有空格,拖动该按钮向左移动并当按钮的左边界接触到左边按钮时,释放鼠标键,则可在此按钮右边插入一个空格。第42页/共74页43如果某按钮的左右两边都有空格,拖动该按钮向右移动并接触到相邻按钮时,则此按钮左边的空格保留,按钮右边的空格消失。反之亦然。实现工具栏编码实现工具栏。具体实现步骤如下:步骤一:在工作区中窗口中选中【ClassView】选项卡,用鼠标右键单击【CmainFrame】,在弹出的菜单中选择【AddMemberVa

46、riable】菜单项,系统将弹出【AddMemberVariable】对话框。步骤二:在【Variable Type】栏中输入类型名称CToolBar,在【Variable Name】栏中输入变量名称m_MyDataToolBar。单击【OK】按钮继续。此时,VisualC+将自动在主框架中的类定义文件 MainFrm.h中 添 加 以 下 声 名:CToolBarm_MyDataToolBar;第43页/共74页44步骤三:选择【View】菜单中的【ClassWizard】菜 单 项,或 者 直 接 按 Ctrl+R键,弹 出【MFCClassWizard】对话框。在【Classname】列

47、表框选择CmainFrame类;在【ObjectIds】列表框中选中CMainFrame;双击【Messages】列表栏中的WM_CREATE选项,或者选中WM_CREATE,再单击【AddFunction】按 钮。在【MemberFunction】栏中将会出现OnCreate()函数。步骤四:单击【EditCode】按钮,ClassWizard将自动在框架类的实现文件MainFrm.cpp中添加成员函数OnCreate()。在函数中加入显示工具栏的代码。具体代码如下,其中粗体部分为新添加的代码。第44页/共74页45IntCMainFrame:OnCreate(LPCREATESTRUCTl

48、pCreateStruct)if(CFrameWnd:OnCreate(lpCreateStruct)=-1)return-1;/TODO:Add your specialized creation codehereif(!m_MyDataToolBar.Create(this)|!m_MyDataToolBar.LoadToolBar(IDR_MYTOOLBAR)TRACE0(Failed to created toolbarn);return-1;return0;第45页/共74页46步骤五:编译并运行该程序。当单击工具栏上的新建按钮,窗口中将弹出【个人资料】对话框。此按钮的作用和选择【显

49、示】菜单中的【个人资料】菜单项的效果是一样的。说明:(1)在 上 例 创 建 工 具 栏 的 过 程 中,曾 用 到 了CToolBar类的对象,CToolBar类是由CControlBar类派生而来的,它用于描述工具栏。其中,Create函数是其成员函数,该函数的原型为:BOOLCreate(Cwnd*pParentWnd,DWORDwStyle=WS_CHILD|WS_VISIBLE|CBRS_TOP,UNITnID=AFX_IDW_TOOLBAR);其中:参数pParentWnd是指向父窗口的指针,dwStyle是工具栏的风格,nID是子窗口的ID号。第46页/共74页47取值风格CBR

50、S_TOPCBRS_BOTTOMCBRS_NOALIGNCBRS_TOOLTIPSCBRS_SIZE_DYNAMICCBRS_SIZE_FIXEDCBRS_FLOATINGCBRS_FLYBYCBRS_HIDE_INPLACE在框架窗口的顶部在框架窗口的底部不随父窗口改变尺寸显示按钮提示尺寸可改变控件条固定浮动状态状态栏中显示按钮的信息不显示工具栏 表6.6 工具栏的部分风格第47页/共74页48(2)TRACE宏TRACE宏提供了类似与printf函数的输出格式,用于将某一信息(即字符串)输出到Dump的设备环境DC中。该宏只在调试状态下工作。TRACE宏的限制是一次最多输出512个字符。如

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁