当前课程知识点:VC++面向对象与可视化程序设计(上):Windows编程基础 >  第5章 资源在Windows编程中的应用 >  5-2 位图资源及其应用 >  5-2

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

5-2在线视频

5-2

下一节:5-3-1

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

5-2课程教案、知识点、字幕

下面我们给大家介绍位图资源及其应用

位图是什么?

首先我们要搞懂一个概念

位图是一种数字化的图形表示形式

位图中的每个像素点是由位图文件中的一位或多位数据表示

整个位图的信息被细化为每个像素点的属性值

位图数据量一般较大

为了提高显示刷新速度

位图操作一般都在内存中完成

下面我们介绍位图的操作过程

首先我们要定义位图句柄

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跟前面是一样的

这个例子比较简单

就是单纯地显示一个位图

我们就讲到这儿

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

第0章 课前讨论

-讨论实录

--0-0

第1章 Windows应用程序基础

-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

第2章 Windows的图形设备接口及Windows绘图

-02-1 Windows图形设备接口

--02-1-1 GDI

--02-1-2 图形刷新

--02-1-3 获得设备环境方法

--02-1-4 映像模式

-02-2 绘图工具与颜色

--02-2-1 画笔

--02-2-2 画刷和颜色

-02-3 常用绘图函数

--02-3 常用绘图函数

-02-4 例题和作业

--02-4-1 例题1

--02-4-2 例题2

--02-4-3 例题3

--02-4-4 例题4

--02-4-5 作业

-第2章源代码

--外部链接

--外部链接

第3章 文本与字体

-3-1 设置文本的设备环境

--3-1 设置文本的设备环境

-3-2 文本的输出过程

--3-2 文本的输出过程

-3-3 例题和作业

--3-3-1 (例3-1)

--3-3-2 (例3-2)

--3-3-3 (例3-3)

--3-3-4 (例3-4)

--3-3-5 (作业)

-第3章源代码

--外部链接

第4章 Windows应用程序中的键盘与鼠标

-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章 资源在Windows编程中的应用

-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章源代码

--外部链接

-第一次作业

--第一次作业--作业

-第二次作业

--第二次作业--作业

-第三次作业

--第三次作业--作业

5-2笔记与讨论

也许你还感兴趣的课程:

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