61菜单 >菜单命令的消息映射 [例 EX Menu成绩输入”菜单项的映射。 (1)选择“Vew菜单→“ ClassWizard”命令项或按Ctr+w快捷键,则出现 MFC ClassWizard对话框,切换到 Message Maps页面 (2)从“ Class name”列表中选择 MAin Frame,在IDs列表中选择 ID_ SCORE IN,然后在 Messages框中选择 COMMAND消息,如图。 rcc靠iwd 区 Message Maps Member Variables I Automation ActiveX Events Class Info I Project Class name: Add class X Sd D -Ex SdiMain Frm h, D:-\Ex SdMMainFrm cpp Add Function. Object [Ds: ID FILE SAVE D FILE SAVE AS UPDATE COMMAND UI Edit Code EW STATUS BAR ID VIEW TOOLBAR Member functions ON WM CREATE v PeCreatewindew Description: Handle a command (from menu, accel, amd button Cancel 图6消息的选择
6.1菜单 ➢ 菜单命令的消息映射 [例Ex_Mmenu]“成绩输入”菜单项的映射。 (1)选择“View”菜单→“ClassWizard”命令项或按Ctrl+w快捷键,则出现 MFC ClassWizard对话框,切换到Message Maps页面。 (2)从“Class name”列表中选择CMainFrame,在IDs列表中选择 ID_SCORE_IN,然后在Messages框中选择COMMAND消息,如图。 图6.6 消息的选择
61菜单 (3)单击[ Add Function]按钮或双击 COMMAND消息,输入成员函数的名称 如图。 (4)单击[OK]。选择新增加的成员函数,单击[ Edit Code]按钮(或直接在函 数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如: void CMainFrame:: OnScoreIno //TODO: Add your command handler code here Af× MessageBox("现在就输入成绩吗?"); 5)编译并运行。在应用程序的顶层菜单上,单击“成绩输入”菜单项或按 At+S组合键,如图 Add esber Funetion 区 Member function name OK oreIn A 现在就输入成绩吗? Cancel Message: COMMAND 确定 Object ID: ID SCORE IN 图68菜单命令执行的结果 图6.7添加成员函数对话框
6.1菜单 (3)单击[Add Function]按钮或双击COMMAND消息,输入成员函数的名称。 如图。 (4)单击[OK]。选择新增加的成员函数,单击[Edit Code]按钮(或直接在函 数名双击鼠标左键),就可以在此成员函数中添加一些代码。例如: void CMainFrame::OnScoreIn() { // TODO: Add your command handler code here AfxMessageBox("现在就输入成绩吗?"); } (5)编译并运行。在应用程序的顶层菜单上,单击“成绩输入”菜单项或按 Alt+S组合键,如图。 图6.7 添加成员函数对话框 图6.8 菜单命令执行的结果
61菜单 6.1.2使用键盘快捷键 (1)先打开上例的项目工作区窗口中 Accelerator的资源项,双击 IDR MAINFRAME,如图 -,L-sai-siereseft Visual c+- [Es_ sai, re- IDR BAINYEAlZ (celerator)l 网 的园日x自2,,吧园曾mRn CMainframe - All class members)-.0nScoreln ·画x!C E NEx Sdi EDIT COPY -i Accelerator IRIKEY 2 DIDR MAINFRAM ID FILE OPEN ID FILE SAVE IRIKEY ID EDIT PASTE Ctl V 白 String Table At· VK BACK NEXT PANE Shift+ VK DELETE RTKEY VK F6 VIRTKEY PREV PANE VK F6 trl. VK INSERI ID EDIT PASTE hift+ VK INSERT ID EDI CU ID EDIT UNDO Ctrl +2 最下端的空行 Clas. 9 Reso.I D FIeV x_sdi exe-a error(s), a warning(s) aoNBulld ( Debua X Find in Files IX Find in Files 2XR.ll Ready 图6.9示例ExSd的加速键资源
6.1菜单 6.1.2使用键盘快捷键 (1)先打开上例的项目工作区窗口中Accelerator的资源项,双击 IDR_MAINFRAME,如图。 图6.9 示例Ex_Sdi的加速键资源 最下端的空行
61菜单 (2)要建立一新的加速键,双击加速键列表的最下端的空行,如图,其中可 设置的属性如表 (3)在上述对话框中,选择在ESd示例中添加的“成绩输入”菜单项的ID 号ID_ SCORE IN作为要联用的加速键的ID号,单击[ Next Key Typed],按下 Ctr|+1作为此加速键的键值 3 General D:ID_ SCORE_IN: 32771 Modifiers sct厂 Alt r Shift K Type Next Key Typed CASCIl VirtKey 图610“ Accel Properities,对话框 表62菜单 General-性对话框的各项含义 「项目 含文 ID 指定资源ID号的列表项,为能和菜单联用,通常选择某菜单项的ID号 用来確定Ct、 Alt. shif是否是构成加速键的组成部分 Type 用来确定该加速键的值是虚拟键(e功还是 ASCII 是指启动加速键的键盘按键 Next Key typed单击此按钮后,用户操作的任何按键将成为此加束键的键值
6.1菜单 (2)要建立一新的加速键,双击加速键列表的最下端的空行,如图,其中可 设置的属性如表 (3)在上述对话框中,选择在Ex_Sdi示例中添加的“成绩输入”菜单项的ID 号ID_SCORE_IN作为要联用的加速键的ID号,单击[Next Key Typed],按下 Ctrl+1作为此加速键的键值。 图6.10 “Accel Properities”对话框
61菜单 6.1.3菜单的编程控制 菜单的基本操作 (1)创建菜单 CMenu类的 CreateMenu和 CreatePopupMenu用来创建一个菜单或子菜单框架,原型 如下 BOOL CreateMenu(: ∥/产生一个空菜单 BOOL CreatePopup(: ∥/产生一个空的弹出式子菜单 (2)装入菜单 将菜单从资源装入应用程序中,需调用 CMenu成员函数 Loadmenu,或者用 SetMenu 对应用程序菜单进行重新设置。 BOOL LoadMenu( LPCTSTR lpszResourceName BOOL Load Menu( UINT nlDResource ) (3)添加菜单项 菜单创建后,可调用 AppendMenu或 iInsertMenu函数添加一些菜单项。 AppendMenu 是将菜单项添加在菜单的末尾处, Insert Menu在菜单的指定位置处插入菜单项,并 将后面的菜单项依次下移。 BOOL AppendMenu( UINT nFlags, UINT IDNewitem =0, LPCTSTR /psz/ewitem NULL: BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ) BOOL InsertMenu( UINT pOsition, UINT nFlags, UINT nIDNewltem =0 LPCTSTR lpsZ/ewitem NULL BOOL InsertMenu( UINT pOsition, UINT nFlags, UINT nIDNewltem, const CBitmap*pOmp);
6.1菜单 6.1.3菜单的编程控制 ➢ 菜单的基本操作 (1)创建菜单 CMenu类的CreateMenu和CreatePopupMenu用来创建一个菜单或子菜单框架,原型 如下: BOOL CreateMenu( ); // 产生一个空菜单 BOOL CreatePopupMenu( ); // 产生一个空的弹出式子菜单 (2)装入菜单 将菜单从资源装入应用程序中,需调用CMenu成员函数LoadMenu,或者用SetMenu 对应用程序菜单进行重新设置。 BOOL LoadMenu( LPCTSTR lpszResourceName ); BOOL LoadMenu( UINT nIDResource ); (3)添加菜单项 菜单创建后,可调用AppendMenu或InsertMenu函数添加一些菜单项。AppendMenu 是将菜单项添加在菜单的末尾处,InsertMenu在菜单的指定位置处插入菜单项,并 将后面的菜单项依次下移。 BOOL AppendMenu( UINT nFlags, UINT nIDNewItem = 0,LPCTSTR lpszNewItem = NULL ); BOOL AppendMenu( UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp ); BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem, const CBitmap* pBmp );