当前课程知识点:VC++面向对象与可视化程序设计(上):Windows编程基础 >  第2章 Windows的图形设备接口及Windows绘图 >  02-4 例题和作业 >  02-4-3 例题3

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

02-4-3 例题3在线视频

02-4-3 例题3

下一节:02-4-4 例题4

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

02-4-3 例题3课程教案、知识点、字幕

下面

我们给大家一起编写一个应用程序

这个程序的功能是这样的

要求在屏幕上出现一个圆心沿正弦曲线轨迹

移动的实心圆

而且每隔四分之一周期

圆的填充色和圆的圆周颜色都发生变化

同时圆的半径在每四分之一周期之内

由正弦曲线幅值的0.2倍到0.6倍线性增长

大家看到这个题目要求应该能想出来

这是一个动画

我们先运行一下看看它的效果是什么样的

然后我们来介绍怎么达到这个效果

我们先看一下这个应用程序运行的效果是什么样的

这个时候大家在屏幕上看到了一个红色的sin曲线

在第一个四分之一周期中

圆和填充色是红色的

到了第二个四分之一周期

颜色就变成绿色的

那么大家看第三个四分之一周期就变成蓝色的

在圆的移动过程中

它的半径在不断地变化

实际上就是我们要求的从sin曲线幅值的0.2倍

到0.6倍线性的变化

那么这时候大家看的圆的移动过程中似乎有卡顿

实际上不是我们应用程序的卡顿

而是我故意在应用程序中设置了一个停留

否则的话

应用程序很快地执行过去

大家看不清效果

好了 那么在看到了应用程序运行的效果之后

我们来一起看一下这个应用程序

首先我们说正弦曲线是这个题目的基础

所以在WinMain函数消息循环之前

要生成正弦曲线各个点的坐标

我们把正弦曲线一个周期的横坐标

分成100个等分点

存储在数组lpSin这个数组中

那么100个点的坐标的计算是这样的

通过一个for循环

然后我们很容易地就把x坐标和y坐标算出来

x坐标实际上就是sin曲线全周期分成的100等份

那么这个算法我想大家很容易了解

我就不细说了

那么x,y

那么y的值实际上是根据x值的sin函数求出来的y的值

那么这个是它的幅值

就是sin曲线的幅值

动态显示圆在正弦曲线上的移动

我们把sin曲线的一个周期分成了100个点

所以数组lpSin的长度为100

那么这样设定圆在正弦曲线上移动时候共有100个位置

也就是说数组中的每一个值是

圆移动时圆心的坐标

每四分之一周期有25个位置

我们这么设

第一个四分之一周期 i<=25的时候

创建红色的画笔跟画刷

因为大家看到第一个四分之一周期的时候

圆以及它的填充色是红色的

那么画刷是用来填充的

画笔是画圆周的

第二个四分之一周期就是25到50

那么50是等于

25呢,因为前面25已经=了

这里就不能用=了

那么这时候用绿色的画笔跟画刷

依此类推

建蓝色跟黄色的画笔跟画刷

那么这时候在WM_PAINT这个消息处理中

调用BeginPaint函数获得设备环境句柄

所以在第一个四分之一周期里面

我们创建了CreatePen创建了一个画笔

画笔的话,这个颜色就是红色的

因为RGB颜色就是红色的

这个是笔的样式

所以大家看到

刚才这个圆不是一个实线的圆周

是一个点划线的圆周

然后我们再把画刷选入当前设备环境

同时随着圆心在sin曲线上的移动

每移动一个点

圆的半径就会从0.2到0.6线性增长

所以的话 我们就要算出

每一个点线性增长后它的圆的半径

那么这里每一个四分之一周期

都要有画笔、画刷和半径的计算

那大家看到了

实际上我每一个点的移动过程貌似有卡顿

实际上是不是卡顿的

是为了停留一定的时间

让大家看得清楚

所以的话, 我们每一步长停留0.1秒

所以用函数Sleep(100)

大家看了每一个步长之间是有停留的

是为了把它看清楚

所以这样的话

当然我们i是从0到99不是分了100等份么

所以到了小于100的时候

都要刷新用户区

而且刷新过程中发送了PAINT消息

消息是发到哪里呢?

发到窗口句柄

这个空,代表的是刷新整个用户区

同时刷新之前要清除用户区的所有内容

如果刷新之前不把用户区的所有内容清除掉

那么就出现图形的覆盖

那么大家注意这个Sleep(100)

里面的参数是以毫秒为单位

所以100毫秒就是0.1秒

下面,我们就进入应用程序

那么我们调出应用程序

有了刚才的知识铺垫

我们讲应用程序就比较简单了

那么在这里面, 我们经常要用到Pi

所以定义了宏定义了一个Pi

这个3.1415926

那这里面

由于WinMain跟前面是一样的

就用省略号就不细讲了

在WinMain里面

我们生成了正弦曲线的点坐标

那么生成点坐标刚才也给大家介绍了

就是100个点

然后我们进入消息循环

所以重点我们介绍WndProc

在这里面,我们创建了一个DC

一个画刷 画笔

以及定义了包含绘图信息的结构体变量

那么我们进入WM_PAINT之后

我们创建了一个DC

然后设置了原点坐标

同时我们创建了画笔

并把画笔选入当前的DC

画了一条正弦曲线

曲线画完后

我们就要处理每四分之一周期的情况

那么刚才介绍了

第一个四分之一周期

第二个四分之一周期

依此类推

它的笔的颜色不一样

大家重点看这个笔的颜色不一样

然后画刷用的是不一样的

那么这个画刷跟这个画刷

这四个画刷都不一样

大家在程序运行过程中如果留意看的话

就会发现每四分之一周期

圆的填充的背景是不一样的

虽然填充的颜色是一样的

但是填充的图案是不一样的

那么它的半径

圆的半径

那么每四分之一周期

这里有4个四分之一周期

它的增长率

它的算法

是一样的

在定义了每四分之一周期的画笔画刷之后

根据我们运行的消息传递

要将它的画刷跟画笔选入当前的设备环境

同时算出当前圆心所在的正弦曲线位置上的坐标

然后进行画圆

这里虽然用的是椭圆函数

但是椭圆函数的长短轴一样的时候

就变成圆

所以就画圆

然后每画一个

每一个步长i++

加的过程中

根据i的值判断来进入哪一个四分之一周期

从而决定选用什么笔和什么画刷

那么都结束后, 就把画笔跟画刷删除

那么每一个步长后

都停留了100毫秒

就是0.1秒

那在100以内

i<100以内

就是我们分了100个点之内

每一个步长都进行用户区的刷新

所以大家看到的那个圆,总是一个圆

如果没有背景刷新的话

不是整个用户区刷新的话

大家会看到一系列圆的轨迹全留在上面

这个有兴趣的同学

自己可以试一下

这个问题实际上处理起来并不那么困难

所以关键代码都给大家做了介绍

大家同样可以从我们教学网站上下载这个例题的代码

自己去分析一下

因为我们例题里面代码里面注释写得非常详细

大家很容易看懂

好!这个例题就讲到这儿

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

--外部链接

-第一次作业

--第一次作业--作业

-第二次作业

--第二次作业--作业

-第三次作业

--第三次作业--作业

02-4-3 例题3笔记与讨论

也许你还感兴趣的课程:

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