当前课程知识点:VC++面向对象与可视化程序设计(上):Windows编程基础 > 第5章 资源在Windows编程中的应用 > 5-2 位图资源及其应用 > 5-2
返回《VC++面向对象与可视化程序设计(上):Windows编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(上):Windows编程基础》慕课在线视频列表
下面我们给大家介绍位图资源及其应用
位图是什么?
首先我们要搞懂一个概念
位图是一种数字化的图形表示形式
位图中的每个像素点是由位图文件中的一位或多位数据表示
整个位图的信息被细化为每个像素点的属性值
位图数据量一般较大
为了提高显示刷新速度
位图操作一般都在内存中完成
下面我们介绍位图的操作过程
首先我们要定义位图句柄
HBITMAP是关键字
定义一个位图句柄
这个句柄的名字大家可以根据你的习惯自己定
这里写着hBm
定义了位图句柄以后
我们仍然是通过LoadBitmap
进行加载操作
或者我们创建一个位图
在这个dc里面创建一个指定宽度和高度的位图
然后通过SelectObject
将位图选入dc设备环境
这个dc是内存设备环境
输出的时候有BitBlt这个函数
然后在指定的设备环境里面
按位图基点的高度、宽度为确定的一个矩形
这样输出一个位图
在输出位图之前
我们需要调用GetObject获取位图的尺寸
因为我们这里谈到基点里面有高度和宽度
位图基点及高宽
高度宽度必然牵涉到尺寸的问题
这个是位图句柄
然后sizeof(BITMAP)
就知道BITMAP结构的大小
这个是位图的一个结构地址
应用程序调用GetObject之后
将指定位图的信息会写入BITMAP这个结构中
BITMAP这个结构在这里不详细介绍了
教材里面写得很详细
大家如果手头没有教材
同样可以去MSDN查找
关于数据结构的问题
学到今天,大家都应该很熟悉
并且能够自主地获取
下面我们通过一个例子来操作位图
这个例子,我们在应用程序中调用了一幅坦克的图片
这是一张位图
然后在用户区中显示出来
那我们看看这个例子怎么做
在5-1的例子中已经给大家演示过关于资源创建的步骤
所以在这里就不在演示了
直接打开应用程序
我们主要讲下这个消息处理函数
在这里,我们定义了设备环境
由于我们介绍过
位图是在内存设备环境里面操作
所以我们定义了内存设备环境
这个设备环境的句柄
我们定义了内存设备环境的句柄
然后这里定义了一个位图句柄
以及BITMAP的数据结构变量bm
这个大家已经了解了
这里定义的几个变量
大家注意到
都是全局变量
在这个应用程序里面
在主函数里面要做什么
在原来的框架的基础上
我们要加载位图
比如我们位图的名字叫pic5
这个位图在什么地方
比如我们定义了这个位图
这个位图的名字是pic5_2
是一个图的名字
那么刚才的pic5是什么?
是位图资源
所以我们打开资源文件
我们要打开资源文件
这个pic5是怎么来的
我们打开资源文件看看
这个跟5-1例子是一样的
通过C++语言代码的编辑器打开
打开之后大家看到
这里是pic5 也就是说
我创建的BITMAP位图的资源
资源的名字叫pic5
资源的名字它所指向的文件是哪一个文件?
是D盘下面的pic5_2这个位图文件
我们看一下
现在大家看到了这是D盘
D盘下面的pic5_2文件
这个pic5_2
就是大家现在看到的这个图
这个图我给大家打开看一下
用画图这个文件
大家看到就是这张图
这是一个位图
所以我们显示的就是这张图
然后在这个地方
就把位图资源加载了LoadBitmap
然后产生一个指向位图资源的句柄
GetObject就是把它加载完了获取位图的尺寸
这个在WinMain里面要做的事情
只加了这个地方
其他的没什么变化
大家看这里并没有像第一个例子那样
有Translator Accelerator
因为我们显示位图的时候不需要加速键资源
所以没有加速键表
所以跟前面的一样
那么WndProc里面
应用程序一执行
它马上显示的内容是通过Create消息来响应的
所以我们在Create里面写上了这些代码
获取设备环境句柄
然后 获取内存设备环境句柄
内存设备环境从当前设备环境中获取
获取完了hdc就没用了
我们要的是这个
然后画图,怎么画?
在这个dc里面
我们要获取绘图的信息
然后将位图选入内存设备环境
然后大家知道我前面介绍过
用BitBlt来将内存设备环境的中的位图拷贝到设备环境中去
这个是起始位置 就是基点
它的宽度以及高度
实际上我们使用拷贝的方式直接
把内存内容拷贝到屏幕上
所以通过这个代码把内存内容直接拷贝到屏幕上
拷贝完就是EndPaint
实际上图形显示过程它是一个汇总过程
所以我们把位图选入内存设备环境后
通过BitBlt将内存设备环境内容拷贝到屏幕上
用了SRC这个资源 SRCCOPY这个资源
将内存设备环境中的位图拷贝到设备环境中去
后面的内容就没什么了
DESTROY 关闭
关闭时候要把位图句柄释放掉
只要关闭之前释放就行了
所以放到DESTROY里面
PostQuitMessage跟前面是一样的
这个例子比较简单
就是单纯地显示一个位图
我们就讲到这儿
-讨论实录
--0-0
-1-1 Windows应用程序的特点
--1-1
-1-2 可视化编程
--1-2
-1-3 关于API
--1-3-1
--1-3-2
-1-4 Windows应用程序组成及编程步骤
--1-4-1
--1-4-2
-1-5 应用程序举例
--1-5-1
--1-5-2
--1-5-3
-02-1 Windows图形设备接口
-02-2 绘图工具与颜色
-02-3 常用绘图函数
-02-4 例题和作业
-第2章源代码
--外部链接
--外部链接
-3-1 设置文本的设备环境
-3-2 文本的输出过程
-3-3 例题和作业
-第3章源代码
--外部链接
-4-1 Windows 应用程序中的键盘与鼠标
--4-1
-4-2 键盘的操作应用举例
--4-2
-4-3 例题
--4-3
-4-3 鼠标在应用程序中的应用
--4-3
-4-4 例题4-4
--4-4
-第4章源代码
--外部链接
-5-1 菜单和加速键资源及其应用
--5-1
-5-1(例1)
--5-1(例1)
-5-2 位图资源及其应用
--5-2
-5-3 对话框资源及其应用
--5-3-1
--5-3-2
-5-4 图标资源的应用
--5-4
-第5章源代码
--外部链接
-第一次作业
--第一次作业--作业
-第二次作业
--第二次作业--作业
-第三次作业
--第三次作业--作业