当前课程知识点:VC++面向对象与可视化程序设计(下):MFC编程基础 > 第8章 在MFC中创建应用程序的资源 > 8-1&2 资源的应用以及菜单资源的使用 > 8-1-1
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(下):MFC编程基础》慕课在线视频列表
大家好
今天我们学习第八章
在MFC中创建应用程序资源
在前面介绍的资源编写过程中
所有的代码由用户自己来编写完成
这样的训练
就使得大家
对某一个具体的资源所需要的代码非常熟悉了
那么在这个基础上
我们今天来学习
利用MFC的环境
建立应用程序的资源
由于在MFC中创建资源
系统会给你生成很多的代码
那有了前面的基础
大家就很容易识别
哪一些代码是核心代码
我们看一下在MFC里面可以创建哪一些资源
比如说加速键资源
位图资源 光标资源 对话框资源
图标资源 菜单资源 字符表资源 工具栏资源 等等等等
那么在编程过程中
资源是可以复用的
通过资源的导入和导出这个功能
来实现资源的可复用性
那我们来先讨论下资源的应用
大家很熟悉
菜单是图形用户界面中的重要组成部分
一个设计良好的图形界面程序
总要为用户提供简单实用的菜单
不同的菜单
可以对功能进行分类
菜单可以使用户直观方便地操作程序
为用户提供各类功能
在标准的Windows应用程序中
菜单有三类 一个是系统菜单
还有就是程序主菜单 以及快捷菜单
那我们下面来看一下菜单资源的使用
我们这个程序是这样的
创建一个基于单文档机构的应用程序
在视图中显示一行字符串 叫“Hello World!”
通过建立包含“显示”、“颜色选择”
两个菜单项的“操作”菜单来控制字符串
那么菜单下“显示”用以控制字符串的显示与否
也就是显示这个“Hello World!”
因为“颜色选择”里面有“红色”、“绿色”、“蓝色”
“颜色选择”中
实际上这里是一个一级菜单 下面是二级菜单
那么选择“红色”、“绿色”、“蓝色”
这个“Hello World!”字符串
就分别变为“红色”、“绿色”、“蓝色”
那在这里 我们要为菜单的菜单项
定义几个ID
在“显示”这个菜单里面
我们选择了ID为ID_OPER_SHOW
然后在“红色”、“绿色”、“蓝色”
分别定义ID为ID_OPER_RED、ID_OPER_GREEN和ID_OPER_BLUE
那么下面我们就开始编写这个应用程序
我们创建一个基于单文档的应用程序
我们名字就给它起为8_1
我们看我们选择单文档
然后这里面有一些其他选项
暂时我们可以不用 都选择缺省
其实这些内容暂时都可以不要它
打印、ActiveX、公共控件这些实际上目前都没用
这个框架暂时留着
我们完成一个空壳的应用程序的框架创建
我们创建完这个应用程序后
我们就开始实现我们这个例题的相关功能
这时候大家看到 系统已经生成这么多文件
看一下我们的资源文件里面
资源文件里面有一个菜单
菜单里面我们看主菜单
那么主菜单里面 实际上系统已经给你生成了
文件、编辑、视图、帮助
我们要做的是在这里
它这里有一个请在此处键入
我们在这里添加菜单
那么我们添加的菜单是 叫做“操作”
“操作”下面这时候有一个叫做“显示”
“显示”我们用一个Ctrl+W
在这个时候我们要给它增加一个ID
这个ID叫ID_OPER_SHOW
在这属性里面 ID在这个地方
我们改成ID_OPER_SHOW
在这个地方 我们是增加的叫做“颜色选择”
“颜色选择”里面 它实际上在下面有一个子菜单
叫“红色”、“绿色”和“蓝色”
也就是我们选择这个“颜色选择”的时候
实际上是为了打开下一级菜单
而真正操作的是下一级菜单
所以的话我们在这里面
对“颜色选择”实际上并没有做具体操作
而是为了打开下一级菜单
而下一级菜单才是下命令的
设置“红色”、“绿色”和“蓝色”
所以的话 我们对“颜色选择”这个菜单项是不设置ID的
那么这里面“红色”我们给它写成“红色”
“绿色” “绿色” “蓝色” “蓝色”
那这个时候我们要给它设置ID
叫做ID_OPER_RED 这是红色
这个绿色我们同样给它设置ID_OPER_GREEN
蓝色我们也要给它设置ID
我们上面已经把菜单造好了 给它保存一下
下面我们要给它增加一些成员
那我们在什么地方增加
我们看一下 我们这里生成了哪一些类
我们这里有系统给你生成了
这个文档类、文档视图类、文档应用类、主框架类等等等等
那么这一些类 我们在后续的文档视图专题里面会给大家做介绍
那现在的话 我们应该在视图类里面
因为我们文档的输出实际上是在视图里面输出
所以在视图类里面 我们要增加一些成员
所以我们添加成员 成员变量的话
比如说我们要建立显示的内容 显示的内容的话
我们就定义一个CSting类的变量
这个变量是什么
我们用来保存要显示的内容
这个内容是什么 就是我们要显示的“Hello World!”那个字符串
我们增加这个
那么这个时候 大家就看CMy8_1View里面就多了这个变量
我们接着讲解 我们刚才谈到
我们的程序 菜单里面有一个“显示”
那么就是说可以显示 也可以不显示
要这样 我们就要定义一个BOOL值 来定义它是否显示
定义一个BOOL值来确定它是否显示
我们先把变量添加好
这里又多了一个变量
然后 我们这里有红色、绿色、蓝色三个颜色
我们就要增加颜色索引
这个颜色索引实际上的话 它可以是一个DWORD类型的
关于DWORD 我们在第一讲里面已经给大家介绍过这个数据类型
m_nColorIndex 用来索引颜色的
这时候三个都增加完了 那这时候我们回过头看
说我们需要在这个CMy8_1View的类中 增加这四个参数
那这里面的第一个
我们已经给大家介绍了 我增加的是CString m_strShow
用来保存“Hello World!”字符串
这个变量是控制显示与否
这个是当前的颜色索引
颜色索引值的话呢 也就是你现在选的是“红色”、“绿色”或者“蓝色” 它有个索引值
然后我们还得定义一个颜色数组
颜色数组里面定义了三的话 就是说有三种颜色
然后这里面可以是0
这时候0的话这里是红色
这里就可以定义索引值为0的时候为红色
这个我们到代码里面再继续介绍
那么这个时候 对于这个数组
我们如何增加进去
实际上就是说 在刚才的添加变量里面
这里只能添加变量
数组添加起来是有困难的
那么我们怎么办 我们回过头来看
这三个变量在什么地方增加了
应该是在View的头文件里面增加了
因为我们打开的是CMy8_1View这个类
那么这个类的定义在哪
这个类的定义 就是在8_1View.h里面定义
然后我们打开这个文件
那这个时候大家看到的Class CMy8_1View视图类
在这个public的地方增加了三个变量
这就是我刚才添加进去的
那很简单 我就给它增加
把这个数组直接增加到这个地方
虽然大家知道 自己要学会编程
不能够完全依靠图形化用户界面的操作
因为图形化用户界面操作的情况下
这时候你如果想增加这个数组 你是增加不成的
但是我程序里面还是需要
但是它这里只能增加变量
所以这时候就是说
我们为什么刚才先演示给大家增加变量
就是说让大家知道 你增加内容是在什么位置
那么当系统无法帮你完成的时候
你就在这位置里面手动增加
实际上后面的例子 大家还可以看到很多东西得手工编程
编译环境里面提供了图形化用户界面的功能 并不是想象的那么强
8_1View这个类里面我们定义了相应的变量
那么这时候 我们对这个颜色进行初始化的设置
为什么 大家回过头来看这个应用程序
实际上选择颜色的时候 我已经告诉大家的是红色
所以我在后台代码里面 就要把这个第0号颜色
它这个根据颜色项的子菜单 实际上它有个索引值
就是子菜单里面的第0项、第1项、第2项
所以它是从0开始索引的
所以这样 我就得把子菜单里面的第0项设为红色
第1项设为绿色 第2项设为蓝色
所以这时候 我在刚才的 它的Index这个地方
就是0、1、2的值
所以的话 可选的这个
它的里面 它的这个0就是红色 1是绿色 2是蓝色
那么这时候 我要做什么事情
我要把这个m_strShow
要显示的内容设为字符串“Hello World!”
而且刚开始运行的时候要TRUE
就是程序运行它就显示出来
而且刚开始显示的时候显示的是红色
所以我们的索引值选0
那同样就是说 对颜色的索引值
0的时候是红色
1的时候是绿色
2的时候是蓝色
那这样的话 我们就要增加初始化的变量
然后 我就进入源文件
因为我们在视图里面操作
所以我进入这个视图
然后我要在构造函数里面进行初始化
那么大家知道 在构造函数里面
我们要进行初始化的话
我们就在这里面增加它的代码
这样的话我们就完成了
这个CMy8_1View的构造函数
这个是CMy8_1View
View里面 这个是函数名和类名同名的情况
这个函数名代表的是构造函数
所以构造函数里面
我们对相关的数据进行初始化
为什么在构造函数里面初始化
因为这几个变量都是在类里面定义的
大家看 都是在这个类里面 头文件里面定义的
是在CMy8_1View里面定义的
定义里面就有一个构造函数
那么实际上 我们是对这个类的构造函数进行补充
因为这里面定义了变量 这四个变量
那么在这里面 这变量的操作
应该说在初始化过程中
应该在构造函数里面完成
那么这样的话 我们就在8_1View.cpp这个文件里面的构造函数里面我们将相关数据进行了初始化
好 我们保存一下
初始化之后我们要做的事情是什么 就是程序运行
它要在界面上把那个“Hello World!”显示出来
把菜单构建完成 而且如果程序运行
如果这个为真 那时期它肯定为真
因为我这里面初始化已经设为TRUE了 所以这一定为真
为真的情况下 在当前的DC环境
那么DC的环境 系统会给你自动设置完成
文本的颜色是什么颜色 是这个值
而这个值是什么
因为刚开始初始化的Index值是0
所以我们Color是Color[0]
而Color[0]是红色
所以设置的文本颜色是红色
然后输出内容是什么
是在(100,100)这个基点上输出这个字符串
TextOut这个字符串
而这个字符串就是我们前面设置的“Hello World!”
我们看一下运行的结果是啥样的
我们给它生成 运行一下
我们可以看到这里没有起作用
颜色设置菜单没有起作用
实际上 显示也没有起作用
那为什么没有起作用
我们来看一下问题出在什么地方
-讨论实录
--0-0
-6-1 MFC概述
-6-2 C++的基本知识
--6-2-1 类
--6-2-2 对象
--6-2-6 重载
--6-2-9 指针
-6-3 MFC类的组织结构及主要的类的简介
--6-3-2 根类
-6-4 MFC中全局函数和全局变量
-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-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-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-1 利用音频函数实现多媒体程序设计
--10-1-1
--10-1-2
--10-1-3
--10-1-4
-10-2 利用Windows Media Player控件实现多媒体程序设计
--10-2
-课堂示例源代码
--html
-例11-1
--例1
-例11-2
--例11-2
-例11-3
--例11-3
-例11-4
--例11-4
-11-1 ODBC介绍与引用
--11-1
-课堂示例源代码
--html
-第三次作业及答题链接