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

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

4-3在线视频

4-3

下一节:4-4

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

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

在了解的键盘的使用之后

我们下面一起来了解下鼠标在应用程序中的应用

关于鼠标的应用 在应用程序中如何通过编程来体现

大家知道 鼠标作为定位输入设备

可以通过鼠标的单击 双击 或拖动功能

用户可以很容易的操作基于Windows图形界面的应用程序

Windows 通过光标来指示当前鼠标的位置

在Windows操作系统中 预定义了几种光标

比如说有箭头光标

十字光标

I型光标

以及十字箭头光标

或者是东南西北方向的光标

当然很多学员可能都玩过游戏

玩游戏的过程中发现 游戏里面的光标

是有些个性化的

特殊的 或者说是卡通形象的

实际上 那是用户自定义光标

用户自定义光标保存在一个扩展名为cur的文件中

所以用户自定义光标 只要这个前面放的是光标的名字

光标的关键字

然后把光标文件放这儿

那么这样就可以自定义自己的光标了

这一行代码仍然要在资源文件中编写

定义了一个自定义光标之后

只是定义了光标

实际上当真正使用的时候

还要加载光标

所以我们通过LoadCursor

在当前实例中加载当前的光标

当前光标就是自己定义的光标

比如说在WNDCLASS类的定义中

大家还经常用到这块

就是每次编程缺省的构架里面

都有一个光标加载问题

我们平常加载的都是标准光标

在这里我写了一行代码

就是在当前窗口下 这是当前实例句柄

说明指的是当前的窗口

在当前的窗口下加载的是IDC_WAIT光标

IDC_WAIT光标实际上是一个等待光标

等待光标在什么时候会出现呢

比如说大家再拷贝一个文件的过程中

这个拷贝动作没有完成 在这个过程中

反正是任何一个过程没有完成 处于等待状态的

通常这个时候将光标定义为 或者加载为 等待光标

通过光标给用户一个状态的标识

当然我们通过LoadCursor这个函数

改变光标的形式

这里IDC_WAIT就不是原来的IDC_ARROW标准的缺省光标了

那么我们谈到 光标它的位置

我们通常可以通过鼠标的移动来确定

这里面就牵涉到鼠标的消息

鼠标的消息里面同样包含lParam和wParam

lParam包含了鼠标当前的位置

wParam包含了各种虚拟键的状态

对于位置来说 它的地位就是x坐标

而高位就是y坐标

而对于虚拟键状态 比如说在按鼠标的时候

我们按的是鼠标的左键 右键 当中键

或者同时按下了Ctrl键,Shift键

这个是经常作为组合键来使用的

对于鼠标的消息 如果不监测Shift键或者Ctrl键

那么直接就是 case WM_LBUTTONDOWN

就是按下左键 或者 WM_LBUTTONUP

释放左键

让然如果L改成R就变成右键了

改成M就是中间键

如果要对Shift或者Ctrl进行监测的话

我们可以这么做

如果按下了左键 我们先确认按下左键

然后再看下是否按下了Ctrl键或者Shift键

那么判断Ctrl键我们用wParam&MK_CONTROL

或者wParam&MK_SHIFT

这里是AND关系

说明什么呢?

如果这个为真 它是同时按下了Ctrl和Shift

如果不是为真 也许两个键都没按

也许是按下了Ctrl或者Shift其中某一个键

因为这里是逻辑与的关系

所以要真的话 只有两个都按下才能为真

所以为真的情况是两个都按下

按下任何一个或者不按 都不会为真

这个逻辑运算 大家很清楚

注意这里用的是MK_CONTROL和MK_SHIFT

我们再回到这一张页面

这里面就是 虚拟键状态

如果Ctrl是MK_CONTROL

Shift是MK_SHIFT

至于 MK_LBUTTON MK_MBUTTON MK_RBUTTON

等同于 WM_LBUTTONDOWN WM_MBUTTONDOWN WM_RBUTTONDOWN

鼠标在操作过程中实际上有单击和双击之分

Windows系统默认的时间间隔为0.5s

也可以调用SetDoubleClickTime()重新设定间隔时间

要是窗口函数能接受鼠标双击产生的消息

必须在窗口注册类的时候要有CS_DBCLKS属性

如果没有CS_DBCLKS属性

单击两次鼠标 时间间隔再短 手再快

也是两次单击

因为它没有双击属性的识别

所以CS_DBCLKS属性的属性是在style样式里面定义的

所以大家可以复习一下wndclass类的构架里面

我们定义了一些参数

参数里面我们来识别一下

定义了这个参数 是鼠标的双击

如果窗口没有上述属性的定义

及时进行了双击

窗口也只能收到两条单击的消息

菜单、滚动条、工具条和标题条等处

这些用户区以外产生的鼠标时间

它会产生一个非用户区的鼠标消息

这个非用户区鼠标消息

并不是有应用程序处理

而是送到DefWindowProc这个函数来处理

这个时候大家可以回忆一下

我们讲的应用程序构架里面

总有一个DefWindowProc函数

由于鼠标移动的随机性

因为鼠标拿在手上的时候 会滑来滑去

实际上要点什么对象 目标很明确

但是走的轨迹 每个人都是不一样的

所以目标明确的情况下 走的过程是随机的

随意也就是说鼠标移动的随机性

如果要使某一个窗口能不间断地捕获鼠标消息

就必须对鼠标加以捕获

我们可以通过SetCaputre()这个函数来捕获

一旦从窗口捕获的鼠标

系统的键盘功能就暂时失效

其它窗口也无法得到鼠标消息

SetCapture()的参数是这个地方

就是在当前窗口的句柄给的这个SetCapture()函数

使得当前窗口获得捕获鼠标消息的权限

当该窗口不需要捕获鼠标消息的时候

就可以用ReleaseCapture()来释放鼠标

否则 其它窗口

由于已经设置了这个窗口获得鼠标消息的情况下

其它窗口都失去了获得鼠标消息的权限

实际上都无法接收鼠标消息

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-3笔记与讨论

也许你还感兴趣的课程:

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