本节我们讲述鼠标的一些基础知识。
本节必须掌握的知识点:
鼠标
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,可以通过检查消息的消息类型来处理相应的鼠标操作。