当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 >  第8章 在MFC中创建应用程序的资源 >  8-3 快捷菜单的创建及其应用 >  8-3

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表

8-3在线视频

8-3

下一节:8-4

返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表

8-3课程教案、知识点、字幕

下面呢,我们介绍快捷菜单的创建

大家平常在操作应用程序的时候

除开在程序的主菜单上进行一些操作

实际上通过单击鼠标右键

经常会弹出一个快捷菜单

那么,我们现在来讨论快捷菜单

我们呢,看一下快捷菜单怎么增加

我们在资源视图里面添加一个菜单

插入一个Menu,这个实际上缺省地叫IDR_MENU_1

这就是我们添加的

这时候,我们把它的ID改为IDR_MENU_POP

IDR_MENU_POP就是我们要增加的

大家注意,这个IDR_MAINFRAME是我们刚才的主菜单

我们做得操作菜单的显示和颜色选择

现在我们IDR_MENU_POP

这个时候我们给它一个名字叫POP

同样,我们增加显示,然后我们增加颜色

颜色里面同样是红色绿色蓝色

在这个地方也可以加上&R 绿色 蓝色

这时候我们给它添加了这么一个菜单

先保存一下

然后我们要把ID设为前面的ID

因为快捷菜单的操作和主菜单的操作是一致的

所以我们也要设成ID_OPER_SHOW

对于颜色,我们仍然设成红色

绿色一样设成绿色

蓝色一样显示为蓝色

这样这几个都显示好了

我们把快捷菜单制作完后

这个快捷菜单还不能够操作

这里面需要使用CMenu类

这个类比较特殊,它继承自CObject类

而不像大部分Windows可视组建继承自CWnd类

因此在一些需要CWnd类的场合,无法使用CMenu类来完成工作

CMenu类提供了许多处理菜单和菜单项的方法

这些方法分别是

构造方法、菜单操作方法、菜单项操作方法和虚拟方法

比如说CreateMenu(),创建一个空菜单并把它附加到CMenu对象上

CreatePopupMenu(),创建一个弹出式菜单并把它附加到CMenu对象上

DestroyMenu(),是去掉附加到Cmenu对象上的菜单并释放该菜单占的内存

LoadMenu(),是从可执行文件装入菜单资源并把它附到CMenu对象上 等等

菜单操作方法中的DeleteMenu()和TrackPopupMenu()是用来处理菜单的顶层操作

DeleteMenu()删除某个特定菜单项

如果被删除的菜单项有相关的弹出式菜单

那么这个弹出式菜单的局并也要被删除并释放内存

TrackPopupMenu()在一个POINT结构所指定的位置显示一个快捷菜单

这里面有几个方法

比如AppendMenu()是把一个新项加到给定的菜单的末端

比如CheckMenuItem()是在弹出式菜单中

把一个校验标记放到下一个菜单项或从一个菜单项中取消一个校验标记

EnableMenuItem()是激活或停止一个菜单项

GetMenuItemCount()是获取菜单项的个数

以及GetMenuItemID()是为设置在指定位置的菜单项获得菜单项标识符

GetMenuSate()是获得指定菜单项的状态

GetMenuString()是获得指定菜单项的标记

以及GetSubMenu()是获得指向弹出式菜单的指针

当然还有InsertMenu()、ModifyMenu()、RemoveMenu()

这些通过字面的含义大家都能清晰地知道他的功能

加载快捷菜单,我们是通过单击鼠标右键来响应的

单击鼠标右键后弹出一个快捷菜单

所以我们要定义两个参数

第一个参数CMenu m_PopMenu

这时用来定义的快捷菜单

然后定义一个快捷菜单的子菜单

那么通过这两个变量来操作

我们来操作一下

我们在它的头文件里面

在刚才增加的这些变量后面

可以增加这两个变量

CMenu类的对象

一个用来标识快捷菜单

一个用来标识快捷菜单的子菜单

然后我们通过视图类里

响应一个鼠标右键的消息

我们选择鼠标右键

这时候右键的消息就传过来了

然后我们就可以编辑代码

我们先回到视图CView类的构造函数

在CView类的构造函数里

我们要把快捷菜单进行加载

我们在这个地方加上加载菜单

这个加载菜单是IDR_POP_SHOW

IDR_POP_SHOW就是我们创建的快捷菜单

当他不再需要的时候

我们要销毁菜单,释放菜单资源

释放的工作由析构函数来完成

所以我们在析构函数里增加这么一行代码

m_PopMenu 弹出式菜单的DestroyMenu()

我刚才响应了一个鼠标右键单击的消息OnRButtonDown

我们现在要编写具体的代码

我们看下它的代码功能是什么样的

首先GetSubMenu是获得一个子菜单

0代表第一个子菜单

然后我们要考虑是不是可以显示

如果是真,那么显示check,如果是假就是uncheck

就是子菜单前面的选中标志

那么在这里CheckMenuItem对IDR_POP_SHOW快捷菜单

通过BYCOMMAND选项命令,去选择是否处于check状态

然后我们要进行将坐标由客户坐标转化为屏幕坐标

因为我们这里要进行鼠标的定位

鼠标在任何一个位置

单击鼠标右键都要弹出快捷菜单

所以我们这里考虑ClientToScreen

将坐标由客户坐标转化为屏幕坐标

然后我们用前面介绍的TrackPopupMenu

这个就是this指针指向当前的环境

这是当前的x,y坐标

这里定义了一个宏是用来对其的

在快捷菜单显示出来的时候靠左显示

这个快捷菜单

我们看下这个程序能不能运行

由于我们把快捷菜单的每个菜单项

都给成了原来主菜单的菜单项的ID

所以这时候就能正常地运行

红色 绿色 蓝色

大家请注意

我刚才是把快捷菜单的每一个菜单项的ID

都改成了主菜单一致的ID

如果刚才没有做这个工作

程序也能运行

快捷菜单也能弹出

但是选择哪一个菜单项的时候

它是不能运行的

因为什么呢

因为系统缺省的ID

我们并没有对系统缺省的ID做消息响应

我们只对原来的显示

红色 绿色 蓝色 Green Blue Red做响应

如果不把快捷菜单的菜单项的ID

跟主菜单的ID,我们刚才创建的操作下面的菜单项的ID等同起来

那么快捷菜单弹出来的也不能工作

好,我们这个例子就介绍到这里

VC++面向对象与可视化程序设计(下):MFC编程基础课程列表:

第0章 课前讨论

-讨论实录

--0-0

第6章 MFC基础知识

-6-1 MFC概述

--6-1 MFC基础知识

-6-2 C++的基本知识

--6-2-1 类

--6-2-2 对象

--6-2-3 类的方法

--6-2-4 内联函数

--6-2-5 构造函数和析构函数

--6-2-6 重载

--6-2-7 友元函数

--6-2-8 友元类

--6-2-9 指针

--6-2-10 类的继承

--6-2-11 多态性和虚拟函数

-6-3 MFC类的组织结构及主要的类的简介

--6-3-1 MFC类的组织结构

--6-3-2 根类

--6-3-3 应用程序结构类

--6-3-4 可视对象类

--6-3-5 通用类

--6-3-6 OLE类

--6-3-7 ODBC数据库

-6-4 MFC中全局函数和全局变量

--6-4 MFC中全局函数和全局变量

第7章 Windows标准控件在可视化编程中的应用

-7-1 概述

--7-1-1

--7-1-2

-7-2 按钮控件及其应用

--128B12447816EEF99C33DC5901307461

-7-3 按钮控件及其应用

--7-3

-7-4 静态控件

--7-4

-7-5 列表框控件

--7-5-1

--7-5-2

-7-6 编辑框控件

--7-6

-7-7 组合框控件

--7-7

-7-8 对话框通用控件

--7-8-1

--7-8-2

-讲义源代码

--html

第8章 在MFC中创建应用程序的资源

-8-1&2 资源的应用以及菜单资源的使用

--8-1-1

--8-1-2

-8-3 快捷菜单的创建及其应用

--8-3

-8-4 加速键资源的创建及其使用

--8-4

-8-5 工具条资源的创建及其使用

--8-5

-8-6 字符串资源的使用

--8-6

-8-7 位图资源的创建及其使用

--8-7

-课堂示例源代码

--html

-第一次作业内容及要求

--html

--第一次作业及答题链接--作业

第9章 单文档与多文档

-9-1 概述

--9-1

-9-2 Doc/View框架的主要成员

--Video

-9-3 文档操作中的一些重要概念

--Video

-9-4 SDI编程实例

--Video

-9-5 MDI编程实例

--9-5-1

--9-5-2

-课堂示例源代码

--html

-第二次作业内容及要求

--html

--第二次作业及答题链接--作业

第10章 多媒体应用程序的设计

-10-1 利用音频函数实现多媒体程序设计

--10-1-1

--10-1-2

--10-1-3

--10-1-4

-10-2 利用Windows Media Player控件实现多媒体程序设计

--10-2

-课堂示例源代码

--html

第11章

-例11-1

--例1

-例11-2

--例11-2

-例11-3

--例11-3

-例11-4

--例11-4

-11-1 ODBC介绍与引用

--11-1

-课堂示例源代码

--html

第三次作业及答题链接

-第三次作业及答题链接

8-3笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。