当前课程知识点:VC++面向对象与可视化程序设计(上):Windows编程基础 > 第4章 Windows应用程序中的键盘与鼠标 > 4-3 例题 > 4-3
返回《VC++面向对象与可视化程序设计(上):Windows编程基础》慕课在线视频课程列表
返回《VC++面向对象与可视化程序设计(上):Windows编程基础》慕课在线视频列表
下面我们通过一个例子给大家介绍下
鼠标应用程序实例
我们看一下这么一个例子
这个例子是要求我们在界面上
分隔为不同的区域
在每一个区域里面显示不同光标的样式
为了容易识别
我们就给他画了几个框在这里面
大家看在这框里面
小矩形框里面
鼠标显示的风格是不一样的
同时这里有一个数据
显示当前鼠标在界面中所处的坐标位置
那么我们运行一下这个程序
那么大家看在这个区域
鼠标是十字
这个是十字箭头的
这个呢是问号的
这个呢是斜向的箭头
这个是纵向箭头
这也是斜向箭头
这个左斜键和右斜键
这是横向的
这是竖向箭头
这是等待光标
那么在这里大家呢可以看到
随着我光标的移动
左上角的数值一直在变化
实际上,它是在显示我当前光标的位置信息
好!我们就看一下它运行的情况
然后,我们来编写这个应用程序
看看如何实现这个功能
好!那么下面,我们就打开我们这个代码
来给大家介绍应用程序的创建过程
跟前面的例子一样
基本构架的内容,我们不讲了
我们主要介绍的是这个窗口处理函数
那么在这里边我们定义了
仍然定义了PAINTSTRUCT
定义了一个DC
定义了一个字体的信息参数
因为我们要显示鼠标的位置
鼠标的光标位置
那么就有一个位置信息
位置信息里面
我们就牵扯到这个信息的显示
我们要有相应的文字来显示
那么这里是画刷 画笔
好这里定义了一个光标
这个Str[15]是什么东西呢
实际上就是左上角大家看到的显示的那个光标位置
光标位置,实际上我们获取了它的位置信息后
给它放在一个字符串里面
然后显示的时候
显示的是字符串
所以字符串的长度定义为15
就是x坐标y坐标的最后合成的字符串
那么这个就是坐标信息了
好了那么我们实际上大家刚才从演示的样例情况来看
我光标实际上是在移动
而并没有点击到某一个区域
只是在不同区域上划来划去移动
所以我们相应的是WM_MOUSEMOVE这个消息
WM_MOUSEMOVE消息,我们说
第一这个长字参数的低字节是x坐标
长字参数的高字节是y坐标
那我们很容易获得x坐标和y坐标
就是鼠标移动过程中
x坐标和y坐标我们很容易获得
那么剩下工作就是什么呢?
就是说我们在哪一个区域
我们在哪一个区域显示什么样的光标
我们就是这个区域
我们设的就是50到350
y的话呢也是50到350
那么这个呢50到350这么个大区域
好!那么就是从这个地方到这个地方
就是50到350
实际上呢这个50这个到150这个250这个350
y方向也是 50、150、250、350
那么形成这么一个区域
那么这样一讲,大家就知道这个区域的
坐标分块是怎么样的
好!那么分块怎么样就知道了
那么这x就是给它分在这个50到350之内
y呢也是在50到350之内
那么也就是说如果鼠标x、y是落在这个区域
然后我们再细分
细分就是说如果x在50和150之间
y也是在50和150之间
那么这时候我们定义为十字型光标
我们加载这个光标
然后我们就把它设置为当前光标
如果是150到250
x在150到250之间
y还是50到150
那么实际上呢就移到了第二个区域
就是大家看到的这个区域
这个区域里面
那么我们就给它定义为带东西南北箭头的十字光标
那么这就是大家看到的十字光标
那么这个光标叫IDC_SIZEALL
同样给它加载
那么实际上
只是大家把这个坐标分块算清楚
在每一个区域中设置一个光标就可以了
这个例题就很容易做出来
那么大家要注意有一个地方给大家提醒一下
比如说我们这里分的是x从50到150
那么x50是大于等于
这个150是小于
那么这个时候等于在哪
等于在下一条这个地方
那么也就是说大家看到方格线撞到方格线上
就是鼠标的位置停留在方格线上的时候
比如说停留在150这个方格线上
那么应该呢从这个代码就可以看到
它这时候光标已经变成东西南北十字光标了
这个大家去体会一下
所以如果你这里x小于150变成小于等于150
那么这里x又大于等于150
那么这个时候就会产生一个什么呢
就是x等于150的状态
到底是十字光标还是十字箭头光标的问题
所以这个地方大家一定要分列好
不要重复设置
那么这个分区块设置的光标呢我就不细说了
就实际上代码都一样
只是把分区块的块分清楚
那么重点提示的是不要在分隔线上把东西摞在一起
就可以了
好了!那么刚刚大家看到了就是说
我们要求的是x和y落在指定区域
那么指定区域之外显示的是什么呢
那就是else这个地方
else这个地方呢就是说
我们这个IDC_ARROW
这是大家都很熟悉的
就是你们现在看到的箭头
现在看到的箭头就是IDC_ARROW
那么其他区域,就是我们指定的刚才那个区域之外
变成了一个普通的箭头光标
好了我们现在就是说把光标设置好之后
我们前面只是设置了光标
然后我们要创建一个DC
GetTextMetric这个文本信息大家都很熟悉了
那么背景刷是白色的刷子
那么大家如果有兴趣你给它改成黑色刷子或其他刷子
看看程序运行的时候背景变成啥样
然后,我们把这个刷子载入当前的设备环境
同时我们定义了一个黑的笔
那么大家想如果这时候我背景刷是黑色的
你再设置一个黑色笔的话你会看到什么呢?
一片黑什么都看不到
因为背景和前景撞色了
但撞色并不等于不画
只是画的你看不见分不开
然后我们把黑的笔选入当前设备环境
然后我们定义了一个矩形区域
这个区域是5,5点开始的
然后字符的宽度跟字符高度我们给定义了
那这个地方做什么用呢?
实际上在这个区域里面
就是刚才运行程序的时候
好!就是刚才运行程序这里有一个
底面有一个框
这个框实际上就是我们设置的显示文本的框
好了那这个框里面我们输出了x、y的坐标
输到哪里去呢?
输到这个字符串里面去了
然后通过TextOut在DC里面输出这个字符串的内容
这个前边定义了一个长度为15的字符数组
是用来保存x、y坐标值的
而且x、y坐标值呢是整型数逗号整型数
后面这个是截止符
这个是字符串的截止符啦
这个\0
那么这个时候大家看呢是x逗号y这么一个格式
所以这个时候大家看到的就是坐标有一个
两个值之间有一个逗号
就是x坐标逗号y坐标这么一个格式
是从这里实现的
因为这里格式串里面有一个逗号
然后把x、y坐标保存到字符串里面去
输出字符串
所以这时候大家看到的是坐标的位置消息
然后就是EndPaint就结束了
前边就关于鼠标移动的问题就结束了
鼠标移动问题结束了实际上我们看到应用程序里面
还有一个矩形区域的框
那么实际上这个矩形区域的框是画出来的
刚才分的50、150、250、350这么一个框
坐标框
那么这个是画出来的
既然是画出来的
我们就要响应WM_PAINT消息
那么刚才程序运行过程中看到鼠标在不同的区域呢
是有一根线画成的框
那么我们刚才在运行程序的过程中
看到鼠标在不同的区域显示不同的样式
那么这个不同的区域
是用线给它分成不同区域的
那么我们就要划线
划线就要响应WM_PAINT消息 开始画
所以我们老规矩创建一个DC
然后呢把这个黑的笔选入当前的设备环境
我们创建的那个选择这个黑的笔
然后把这个黑的笔选入当前设备环境
先画一个矩形区域
50、50、350、350
这不是一个外框
一个矩形
然后里面的几条线实际上就是两横两竖
一个外边的矩形框加里头的两横两竖
就构成了我们的不同区域的分隔线
好了!那其他的就没什么问题了
那么我们这个例子就介绍到这
-讨论实录
--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章源代码
--外部链接
-第一次作业
--第一次作业--作业
-第二次作业
--第二次作业--作业
-第三次作业
--第三次作业--作业