《Windows API每日一练》6.1 鼠标基础知识

本节我们讲述鼠标的一些基础知识。

本节必须掌握的知识点:

鼠标

6.1.1 鼠标

鼠标是1964年由Douglas Engelbart发明的,用来取代由键盘输入的繁琐指令,简化电脑操作。早期的鼠标是单键鼠标,只有一个键,后来逐步改进为双键鼠标和带滚轮的双键鼠标。

检测鼠标

我们可以使用GetSystemMetrics函数来判断是否连接了鼠标:

fMouse = GetSystemMetrics (SM_MOUSEPRESENT);

当鼠标已被安装时,fMouse的值为TRUE(非零),否则值为0。但是,在Windows98中,不论鼠标是否连接上,该函数的返回值总是TRUE。在Windows NT中,该函数的返回值是正确的。

为了确定所安装鼠标的按钮个数,可以利用以下语句:

cButtons = GetSystemMecrics (SM_CMOUSEBUTTONS);

若没有安装鼠标,该函数的返回值为0。但是,在Windows 98下,该函数在没有安装鼠标时还是返回2。

习惯用左手的用户可以利用Windows控制面板来切换鼠标的按钮。程序也可以通过检 査是否调用了带SM_SWAPBUTTON参数的GetSystemMetrics函数,判断鼠标的按钮是否被切换,但是这种方法通常没有必要。食指控制的按钮被认为是左键,即使该按钮在物理位置上位于鼠标的右侧。但是,在一个计算机培训程序中,如果想在屏幕上画出一个鼠标, 在这种情况下可能需要知道鼠标的按钮是否己被切换。

●在控制面板中,还可以设定鼠标的其他参数,比如鼠标双击的速度。从Windows应用 程序中调用SystemParametersinfo函数可以获取或设定这个参数信息。

SystemParametersInfo用于获取或设置系统参数的信息。它允许你查询和修改各种系统设置,如桌面背景、屏幕分辨率、鼠标速度等。

以下是 SystemParametersInfo 函数的原型:

BOOL SystemParametersInfo(

UINT uiAction, // 操作类型

UINT uiParam, // 相关参数

PVOID pvParam, // 相关数据

UINT fWinIni // 更新方式

);

返回值:

如果函数调用成功,返回值为非零值(TRUE)。

如果函数调用失败,返回值为零(FALSE)。

SystemParametersInfo 函数的使用方法取决于所需的操作类型和参数。以下是一些常见的示例用法:

1.获取桌面背景路径:

WCHAR wallpaperPath[MAX_PATH];

SystemParametersInfo(SPI_GETDESKWALLPAPER, MAX_PATH, wallpaperPath, 0);

在这个示例中,SPI_GETDESKWALLPAPER 是操作类型,MAX_PATH 是缓冲区大小,wallpaperPath 是接收桌面背景路径的缓冲区。

2.设置鼠标速度:

int mouseSpeed = 10; // 设置鼠标速度为 10

SystemParametersInfo(SPI_SETMOUSESPEED, 0, (PVOID)mouseSpeed,

SPIF_UPDATEINIFILE);

在这个示例中,SPI_SETMOUSESPEED 是操作类型,(PVOID)mouseSpeed 是要设置的鼠标速度值,SPIF_UPDATEINIFILE 指定更新系统设置。

【注意】具体的操作类型、参数和更新方式取决于你想要实现的具体功能。详细的操作类型和参数值可以在相关的文档或参考资料中找到。

●获取鼠标位置:GetCursorPos

BOOL GetCursorPos(

LPPOINT lpPoint // 接收鼠标位置的指针

);

该函数用于获取当前鼠标的屏幕坐标位置,并将结果存储在指定的 POINT 结构中。

●设置鼠标位置:SetCursorPos

BOOL SetCursorPos(

int X, // 鼠标的水平坐标

int Y // 鼠标的垂直坐标

);

该函数用于设置鼠标的屏幕坐标位置。通过提供目标位置的水平和垂直坐标,可以将鼠标移动到指定的位置。

鼠标热点

当Windows用户移动鼠标时,Windows系统会在显示设备上移动一个位图格式的小图 标,称为"鼠标指针"。鼠标指针具有一个单像素精度的"热点"(hot spot)。热点在显示设备上指示了一个精确的位置。当我提到屏幕上鼠标指针的位置时,实际上是指热点的位罝。

Windows为程序提供了几种预定义的鼠标指针。最常用的是斜向箭头,称为 IDC_ARROW(定义在WINUSER.H头文件中的标识符)。

箭头的顶点即为热点。IDC_CROSS指针(被本章后面的BLOKOUT程序所采用)的热点 位于十字形图案的中心。IDC_WAIT指针呈沙漏形(不同的Windows版本会有所不同),一般用在程序中表示忙碌状态。程序员还可以设计属于自己的指针。本书会在第十章讲述如何设计自定义鼠标指针。对一个具体窗口来说,默认的鼠标指针在定义窗口类结构时就被指定了。是否还记得初始化窗口类时指定的鼠标位图?例如:

wndclass.hCursor = LoadCursor (NULL, XDC_ARR0W);

在 Windows 平台上,可以使用以下函数来获取和设置鼠标热点位置:

●获取鼠标热点位置:GetIconInfo

BOOL GetIconInfo(

HICON hIcon, // 光标图标句柄

PICONINFO piconinfo // ICONINFO 结构指针

);

该函数用于获取光标图标的信息,包括光标热点位置。通过传递光标图标的句柄和指向 ICONINFO 结构的指针,可以获取光标图标的热点位置。

●设置鼠标热点位置:SetCursor

HCURSOR SetCursor(

HCURSOR hCursor // 新的光标句柄

);

该函数用于设置当前光标。通过传递一个新的光标句柄,可以更改当前光标并指定新的热点位置。

显示和隐藏鼠标

●显示/隐藏鼠标光标:ShowCursor

int ShowCursor(

BOOL bShow // 指定是否显示鼠标光标

);

该函数用于显示或隐藏鼠标光标。通过传递 TRUE 或 FALSE 来决定是否显示鼠标光标。

鼠标消息

鼠标消息是指在 Windows 系统中与鼠标操作相关的消息。当用户与鼠标进行交互时,系统会生成相应的鼠标消息,以通知应用程序有关鼠标操作的信息。

在 Windows 消息循环中,可以通过检查消息的消息类型来确定是否为鼠标消息,并进一步处理相应的操作。以下是一些常见的鼠标消息:

●WM_MOUSEMOVE:表示鼠标移动消息。当用户移动鼠标时,系统会发送该消息,并包含当前鼠标的屏幕坐标。

●WM_LBUTTONDOWN:表示左键按下消息。当用户按下鼠标左键时,系统会发送该消息,并包含当前鼠标的屏幕坐标。

●WM_LBUTTONUP:表示左键释放消息。当用户释放鼠标左键时,系统会发送该消息,并包含当前鼠标的屏幕坐标。

●WM_RBUTTONDOWN:表示右键按下消息。当用户按下鼠标右键时,系统会发送该消息,并包含当前鼠标的屏幕坐标。

●WM_RBUTTONUP:表示右键释放消息。当用户释放鼠标右键时,系统会发送该消息,并包含当前鼠标的屏幕坐标。

●WM_MOUSEWHEEL:表示鼠标滚轮消息。当用户滚动鼠标滚轮时,系统会发送该消息,并包含滚动的距离和方向。

这些消息是在 Windows 消息循环中使用的常见鼠标消息,你可以在应用程序的消息处理过程中捕获并响应这些消息。使用消息处理函数,如 WndProc,可以通过检查消息的消息类型来处理相应的鼠标操作。

相关推荐
我代码抄都抄不明白1 小时前
【无标题】蓝屏事件 139
c语言·windows·microsoft·visual studio
“αβ”5 小时前
c语言的烫烫烫烫烫??
c语言·开发语言·c++
系统之家装机大师5 小时前
老机福音!最精简最快的Win7系统:免费下载!
windows·微软·电脑
我不会起名字呀5 小时前
在 C 语言中使用 UT_hash_handle 简化实现哈希表
c语言·链表·华为od
Arran阿蓝7 小时前
8.javaSE基础进阶_泛型generics(无解通配符?+上下界统配符super&extends)
java·jvm·windows·intellij-idea
我爱吃福鼎肉片7 小时前
【数据结构】——链表经典OJ(leetcode)
c语言·数据结构·leetcode·链表
danielli7 小时前
C# Modbus设备信息加载的实现方式(1)
java·windows·c#
南棱笑笑生8 小时前
20240629在飞凌的OK3588-C开发板的Linux R4系统下使用i2cdetect确认I2C总线
linux·运维·c语言
mrathena8 小时前
Windows 11 安装 安卓子系统 (WSA)
android·windows
qq_454384718 小时前
JDK 为什么需要配置环境变量
java·开发语言·windows