⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 06.1 菜单命令晌应函数.txt

📁 网上第一本以TXT格式的VC++深入详解孙鑫的书.全文全以TXT格式,并每一章节都分了目录,清晰易读
💻 TXT
字号:
第6章菜单
菜单栏、工具栏和状态栏是组成 Windows程序图形界面的三个主要元素。大多数 Windows应用程序都提供了菜单,作为用户与应用程序之间交互的一种途径。本章主要讲解与菜单相关的编程知识。 
6.1 菜单命令晌应函数
首先,新建一个单文档类型的 MFC App Wizard ( exe)工程,工程取名为: Menu。接着 B uild井运行该程序,可以看到对于这个新建的程序来说, MFC已经帮我们创建了一个菜单,并完成了一些菜单功能。例如单击【文件】菜单下的【打开】菜单命令,即可弹出打开文件对话框。当用户单击某个菜单项时,程序中就会调用这个菜单项的命令响应函数,来完成这个菜单项的功能。
在 VC++集成开发环境中,单击左边窗格中的 ResourceView选项卡,可以看到 Menu项下有一个名为 IDR MAINFRAME的菜单资源,它就是刚才我们在 Menu应用程序界面中所看到的菜单。这是 MFC AppWizard为 Menu这个单文档程序自动创建的一个主菜单。双击这个菜单资源名称,即可在 VC++开发界面的右边窗格中打开菜单编辑器。如图 6.1所示。
图 6.1默认的 IDR_MAINFRAME顶层菜单 

VC++提供了一个所见即所得的资源编辑器,如果我们要为程序添加自己的菜单项,可以在这个菜单中直接添加,程序,运行时就能看到自己定义的菜单项。例如,可以在【帮助】菜单后添加一个菜单项,方法是用鼠标右键单击图 6.1中【帮助】菜单后的虚线框,并从弹出的快捷菜单中选择【Properties】菜单命令,即可弹出如图 6.2所示的菜单项属性对话框。把这个菜单项的名称设为 Test,即在这个对话框的 Caption编辑框中输入: Test, 
E菜单栏资源上,就能看到新添加如图6.3所示,此时在如图6.1所示的IDR M 
的这个菜单项。 
图 6.2 Menu Item Properties对话框

在添加菜单项的时候,如果不小心用鼠标单击了菜单项属性对话框以外的地方,属性对话框就会消失,如果我们要添加多个菜单项,就需要重复地去打开属性对话框,这对我们编程是极为不方便的。读者可以看到在菜单项属性对话框的左上角有一个钉子一样的按钮锢"单击这个按钮后,它就变成这样一个图标: l"。这时,我们用鼠标单击窗口中其他任何地方,这个属性对话框都仍是显示状态。利用这种方法,可以让属性对话框一直处于显示状态,直到我们不再需要编辑资源时再关闭它。这种方法不仅适用于菜单资源的编辑,对程序中其他资源,例如工具按钮、图标等都一样适用。
图6.3添加菜单项Test后的IDR_MAINFRAME顶层菜单

另外,可以从图 6.2所示的属性对话框中看到,对于刚才创建的【Test】菜单项,它的E项是灰色的。可以用鼠标分别单击【文件1【编辑】、【查看】和【帮助】菜单,发现它们的E项都是灰色的。但是当我们单击这些子菜单下的菜单项时,例如【文件】子菜单下的【新建】菜单项,可以发现它的ID项是可以输入和修改的,如图6.4所示。可以比较一下图 6.2和图 6.4.可以看到前者的 Pop-up选项是选中状态,而后者并未选中此选 I页。读者可以再看看【文件】、【编辑】、【查看】和【帮助】这几个菜单,会发现它们的Pop-up选项都是选中状态。MFC中,把设置为 Pop-up类型的菜单称为弹出式菜单. Visua1 C++ 默认顶层菜单为弹出式菜单。这种菜单不能响应命令。是不是顶层菜单只能是弹出式菜单呢?当然不是,只要将顶层菜单的 Pop-up选项去掉,该菜单就不是弹出式菜单,而成为一个菜单项了。例如,把刚才新建的【Test】菜单的这个选项去掉,这时它的E项就能够被编辑了,我们可以输入一个m号,例如IDM TEST。 
图 6.4新建菜单项的属性对话框
国际:MFC都是采用大写字母梢阳资源ID号的。为了与阳C保持一

致,程序中也应该使用大写字母来标识D号。
目小技巧:程序中会用到多种资源,在为资源确定其E号时,为了明确区
分资源类型,一般都遵循这样一个原则:在 "ID"字符串后加上一个标识资源、
类型的字母,例如,我们给Test菜单项指定的这个B号就是在 "m"字符串后加了一个字母 "M",表示这是Menu,即菜单资源。以后我们还会遇到光标 (C田sor)资源,其E号是在"ID"字符串后加上一个字母"c";而图标资源(1,∞n)的B号会在"10"字符串后加上一个字母"1"。也就是说,菜单资源E号以"10M"开始;光标资源E号以 "II汇二'开始;围标资源E号以"DL"开始。
下面为【Test】菜单添加命令响应,可以利用第四章中介绍的ClassWizard工具来完成。单击【View】菜单下的【ClassWiz缸d.. .】菜单项,即可打开MFCClassWizard对话框,如图 6.5所示。也可以直接在【Test】这个菜单上单击鼠标右键,从弹出的快捷菜单中选择 <ClassWizard. . .】菜单项,同样可以打开如图6.5所示的MFCClassWizard对话框。
图 6.5添加Test菜单命令的消息响应函数

这里,我们打算在框架窗口中响应这个菜单命令,因此在 ClassWizard对话框中的对象 ID ( Object IDs)列表中选择 IDM_TEST,在类名称 ( Class name)下拉框中找到 CMainFrame并选中,在消息 (Messages)列表框中选中COMMAND项,然后单击【Add Function..】命令来增加一个响应函数,这时会弹出如图6.6所示的对话框。在这个对话框中,给出了Test菜单命令响应函数的默认名称: OnTest,可以修改这个名称,本例保持该名称不变,单击【OK】按钮,返回到如图6.5所示的MFCClassWizard对话框。这时,在该对话框底部的成员函数 (Memberfunctions)列表中就多了一项,就是新添加的【Test】菜单命令响应函数,如图6.7所示。单击对话框上的【EditCode】按钮,即可跳转到OnTest函数的定义处。 

图 6.6 Add Member Function对话框图 6.7新添加的OnTest命令响应函数项


" ‘ I 165 

我们可以在 OnTest函数中添加下面这行代码,以弹出一个消息框表示该函数被调用了: 

MessageBox("MainFrarne Clicked"); 
Build井运行 Menu程序,当单击程序菜单栏上的【 Test】菜单项时,就会弹出一个消息框,该消息框上显示了在 OnTest函数中设置的字符串: MainFrame Clicked,这就说明 OnTest函数被调用了。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -