当前课程知识点:VC++面向对象与可视化程序设计(上):Windows编程基础 >  第4章 Windows应用程序中的键盘与鼠标 >  4-4 例题4-4 >  4-4

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

4-4在线视频

4-4

下一节:外部链接

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

4-4课程教案、知识点、字幕

下面我们再讲一个应用程序的编写

这个程序是要求 打开这个应用程序后

按下鼠标的左键 在窗口中移动

大家现在看 比如说鼠标现在移动到这个位置

按下鼠标左键 这个时候

这个点 光标变成了十字形

按下鼠标左键 在窗口中移动

将按下左键时所在点和当前移动所形成的矩形

涂成灰色

大家看到的 随着我移动

移动区域变成了灰色

刚按下点的时候 光标为十字形

当抬起鼠标左键的时候

将前面所绘制的矩形拉伸到整个窗口

大家看这个窗口 整个变成灰色

拉伸过程中 光标设置为沙漏光标

然后 若双击鼠标左键

则灰色消失 窗口恢复到初始状态

大家再看一下

光标停在这个地方 这个时候光标为十字形

拉的过程中 光标变成沙漏光标 就是等待光标

然后停掉 鼠标抬起

就变成了整个区域的灰色

这个时候 鼠标在界面的任何位置双击

他又恢复到初始状态

这个例子就是这么个功能

下面我们来讲解这个例题的编写

我们还是只讲窗口消息处理函数

其他的和前面的类似

完整的源代码我们在我们的教学网站上已经上载

大家可以下载去学习

我们在这个应用程序里面

设置了这么一些参数

一个是operate

那么就是操作

一个是ready

是可以记录操作状态

那么ready和operate

一个是准备一个是操作

所以呢肯定是互斥的

刚开始的状态一定是ready状态

然后我们定义一个坐标BeginP和EndP

请大家注意这BeginP和EndP都是Point数据类型

说明呢这个BeginP里面包含了Point的x和y

EndP也是包含了Point的数据结构里面的x和y成员

那么BeginP就是我们鼠标刚才点下去的时候

看到的那个点

这个BeginP的话实际上就是

比如我的鼠标在这个位置点下去

那么这个点就是BeginP拉过来

这个终止点就是EndP

这个坐标

那么我们运行一下就知道了

然后这里定义了一个DC

这里由于我们要画图要用PAINTSTRUCT

然后画笔画刷

这个大家都知道了

那这个时候

大家知道我们在画窗口过程中

我们使用鼠标左键去点这个位置

所以得话,我们响应的是什么呢?

是鼠标左键

所以WM_LBUTTONDOWN

WM_LBUTTONDOWN如果这个operate非

就是不是在操作

跟ready两个相与是真

那么这时候呢operate呢给它激活

那么就是左键激活

开始捕获坐标消息

那么这个时候既然这个激活了

ready一定不是处于准备状态而是处于操作状态

所以这个就变成FALSE

然后开始捕捉鼠标

SetCapture那么就是在我们这个窗口中

激活对鼠标的捕捉

那么捕捉过程中

我们要载入这个光标

我们载入是IDC_CROSS

所以的话因为载入是IDC_CROSS

所以获得这个捕捉属性之后

我们一点下去就是十字光标

这就是捕捉到十字光标

那么十字光标捕捉完了

我们这里的位置是在哪呢?

马上获取BeginP的x坐标和BeginP的y坐标

那么就是鼠标位置的长字参数的低字节

和高字节

所以这样的话呢就是一点下去

马上就获取这个光标的位置

同时把这个光标设成十字光标

那么这样的话,我们就捕捉了这个信息

然后我们要做什么事情?

我们点下去之后

我们鼠标要移动

所以移动到终止点地方

我们才能知道它的点的坐标在哪

那么这时候

由于移动我们响应的是WM_MOUSEMOVE消息

那么如果是可以操作状态而不是ready状态的话呢

我们就要获得这个低字节

字参数低字节的是终止点的x坐标

和终止点y坐标

那么这时候我们要画一个矩形

矩形的话

我们有矩形的左边 右边 上边 下边

那么为什么要进行这么一个判断呢?

我们是要保证矩形的这个左上角

这个点是在左上角

而截止点在右下角

我们可以唯一的画一个矩形

然后对这个矩形进行刷新

那么为什么会这么做?

为什么会进行BeginP的x小于EndPx的判断

因为我们画图过程中可以这么画

可以这么画

可以这么画

并没有说必须是从上画到下

所以这样呢就出现BeginP这个初始点x

可能大于这个终止点的x

那么如果这种情况的话

就可能是从右边往左边画

那么这时候BeginP

x在这边

这个EndP

这个x显然就比BeginP的x要小

所以不见得就是

BeginP的x就是小于EndP的x

所以这样的话我这么画过来

BeginP的x一定是大于EndP的x

因为x坐标是向右的

那同理的话

也会出现BeginP.y和EndP.y的大小位置问题

好了所以要进行这么比较后

能保证这个矩形的上下左右的大小

然后,我们才可以画灰色的矩形

然后,由于我们载入光标的时候

就是滑动以后

MOUSEMOVE就是滑动以后我们显示的是等待光标

所以的话,就是大家看

我们到这滑动以后

这时候,光标是等待光标

所以,MOUSEMOVE过程中是等待光标

那么这里实际上我们加载的是等待光标

然后刷新

好了那么我们把这应用程序里面

比如说我们拉到这个地方后

鼠标左键要抬起来

那么我们还要响应鼠标左键抬起来的消息

好!抬起来后

是整个是变成灰色了

那么我们响应鼠标左键抬起来的消息operate

那么这时候呢我们仍然

加载的是等待光标

然后获取整个用户区

然后刷新整个用户区

这时候再把光标回到普通的箭头光标

那么大家看到我这个抬起来之后

光标变成普通的箭头光标

好了然后呢ReleaseCapture

那么把鼠标呢在当前捕捉状态的

在当前窗口的捕捉状态释放

那么实际上呢我们还有一个WM_PAINT消息

WM_PAINT消息是做什么

因为我这个画过程中放开的时候要变成灰色

所以这样的话我们就有一个填充的问题

填充就要用到WM_PAINT消息

WM_PAINT消息里面呢

我们在当前的设备环境进行填充

所以创建DC

然后我们填充的是灰色的画刷

然后将这个浅灰色画刷选入当前设备环境

然后我们画这个矩形

将这个矩形区域进行填充

矩形区域填充的大小是怎么来的呢?

就是从这里获取的填充区域大小

从这里获得的

而这里就是保证那个上下左右的坐标顺序

好了那么在这个填充区域

做完后我们把画刷就删除掉了

那么如果就是PAINT

如果这个ready是FALSE

那么说明什么呢?

说明它是在操作状态

如果是ready状态的话呢?

那么ready状态实际上我们大家看到了

它这个原来是白色的

所以的话,我们把整个用户区进行填充

这里还有一个问题

就是我们这个时候整个用户区

填充成灰色后我们要双击它后

它又变成白色了 复原了

那么这时候呢我们还要响应

鼠标双击的消息

鼠标双击的消息复原后要把

ready如果是FALSE就变成TRUE

初始状态

那么大家再回过头来看

初始状态这个ready是TRUE的

operate是FALSE

所以得话,我们回过头来

又给它变成初始状态

ready如果是FALSE一定变成TRUE

TRUE就可以又进入重新的操作

然后进行刷新

整个刷新的时候是对整个用户区进行刷新

刷新按系统标准的画刷刷新

所以原来系统刷是白色的

所以又复原成白色

那么这样的话我们就完成了

整个应用程序功能的编写

那么这个代码我们就介绍到这

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

--外部链接

-第一次作业

--第一次作业--作业

-第二次作业

--第二次作业--作业

-第三次作业

--第三次作业--作业

4-4笔记与讨论

也许你还感兴趣的课程:

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