《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,可以通过检查消息的消息类型来处理相应的鼠标操作。
相关文章:
《Windows API每日一练》6.1 鼠标基础知识
本节我们讲述鼠标的一些基础知识。 本节必须掌握的知识点: 鼠标 6.1.1 鼠标 鼠标是1964年由Douglas Engelbart发明的,用来取代由键盘输入的繁琐指令,简化电脑操作。早期的鼠标是单键鼠标,只有一个键,后来逐步改进为双…...
闹大了!OpenAI 宣布终止提供API服务
事件背景: OpenAI宣布终止对中国提供API服务,影响中国大陆的API开发者。受影响的开发者收到OpenAI的警告信,要求7月9日后停止服务。 OpenAI的业务和营收: 2023年营收16亿美元,2024年上半年年化营收达34亿美元。营收来…...
java里的空接口实现它有什么用?
我们在看源码时,经常会看到一些空接口,这些空接口里没有一个方法,实现它有什么作用呢?让我们先找几个常见的空接口看看。 一、Serializable接口 在Java中,一个常见的空接口就是java.io.Serializable。 public inter…...

Spring的jar包下载(最新版6.0版本)
1.在Spring官网的projects下面点击spring-framework 2.进入github官网 3.进入github后往下滑,点击Spring Framework Artifacts 4.往下滑找到 点击 5.在左边先点击Artifacts,在右边找到 libs-snapshot,展开libs-snapshot(之前其他…...
解决Java中数据库连接泄露的技术
解决Java中数据库连接泄露的技术 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 介绍 在Java应用程序中,数据库连接的泄露是一个常见且影响性能的…...

网页视频录制,分享3种好方法
随着互联网的飞速发展,视频内容在网页上的呈现与传播变得日益普遍。网页视频录制作为一种重要的技术手段,不仅方便了我们获取和保存网页上的视频内容,还为教育、娱乐、营销等多个领域提供了全新的应用可能。 但是网页视频怎么录制࿱…...
LeNet网络的实现
LeNet网络的实现 import torch from torch import nn from d2l import torch as d2lx 28 net nn.Sequential(nn.Conv2d(1, 6, kernel_size5, padding2), nn.Sigmoid(),nn.AvgPool2d(kernel_size2, stride2),nn.Conv2d(6, 16, kernel_size5), nn.Sigmoid(),nn.AvgPool2d(kerne…...
华为HCIP Datacom H12-821 卷6
1.单选题 下面是一台路由器的部分配置,关于该部分配置描述正确的是,[HUAWEllJip ip-prefix plpermit 10.0.192.0 8 greater-equal 17 less-equal 18 A、10.0.192.0/8 网段内,掩码长度为 20 的路由会匹配到该前缀列表,匹配规则为允许 B、10.0.192.0/8 网段内,掩码长度为…...
深入理解SQL优化:理论与实践的结合
深入理解SQL优化:理论与实践的结合 SQL优化是数据库性能优化的核心,通过优化SQL查询,可以极大地提高数据库的响应速度和资源利用效率。本文将以SQL优化的理论基础和实践应用为主线,结合具体案例,系统化地介绍如何有效…...
PostgreSQL 高级功能与扩展(九)
1. JSONB 数据类型与操作 1.1 JSONB 简介 JSONB 是 PostgreSQL 中的一种数据类型,用于存储 JSON 格式的数据,并提供高效的查询和索引功能。 1.1.1 创建 JSONB 列 CREATE TABLE json_data ( id SERIAL PRIMARY KEY, data JSONB ); 1.2 JSONB 查询与索…...
【LinuxC语言】UDP数据收发
文章目录 前言udp流程图udp函数介绍bind函数recvfrom函数sendto函数示例代码总结前言 在计算机网络中,UDP(用户数据报协议)是一种无连接的传输层协议,它允许应用程序快速地发送短的消息或数据报。由于UDP不需要建立和断开连接,因此它的传输速度往往比其他协议更快,但它也…...

【深度学习驱动流体力学】计算流体力学openfoam-paraview与python3交互
目的1:配置 ParaView 中的 Python Shell 和 Python 交互环境 ParaView 提供了强大的 Python 接口,允许用户通过 Python 脚本来控制和操作其可视化功能。在 ParaView 中,可以通过 View > Python Shell 菜单打开 Python Shell 窗口,用于执行 Python 代码。要确保正确配置 …...

EWM学习之旅-1-EWM100
系统学习一个业务模块已经变得越来越重要,开始吧,EWM! EWM的Learning Journey中包括7本 ebook,100/110/115/120/125/130/140,一本一本的啃吧,相信很多内容是重复的。 EWM100很适合初学者,了解概念术语&…...
qt中的枚举值-QMetaEnum
QMetaEnum 测试代码hcpp 讲解 测试代码 h #include <QMainWindow> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACEclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr);~M…...

这才是CSDN最系统的网络安全学习路线(建议收藏)
01 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 无论网络、Web、移动、桌面、云等哪个领域,都有攻与防两面…...
微软Edge浏览器多用户配置文件管理:个性化浏览体验
在家庭或工作环境中,经常需要在同一台计算机上为多个用户创建和管理独立的浏览体验。微软Edge浏览器提供了多用户配置文件管理功能,允许用户为每个账户设置独立的书签、历史记录、密码、扩展和设置。本文将详细介绍如何在微软Edge中管理多个用户配置文件…...

10.2 JavaEE——Spring MVC入门程序
要求在浏览器发起请求,由Spring MVC接收请求并响应,具体实现步骤如下。 一、创建项目 在IDEA中,创建一个名称为chapter10的Maven Web项目。 (一)手动设置webapp文件夹 1、单击IDEA工具栏中的File→“Project Structu…...
Python 处理大量数据的相关库和框架推荐
Python 处理大量数据的相关库和框架推荐 Python 生态系统中存在多个强大的库和框架,它们可以帮助开发者高效地处理大量数据。以下是一些广泛使用的推荐选项: 1. NumPy 一个用于大规模数值计算的科学计算库。提供多维数组对象和相应的操作。 2. Panda…...

【unity笔记】七、Mirror插件使用
一、简介 Mirror 是一个用于 Unity 的开源多人游戏网络框架,它提供了一套简单高效的网络同步机制,特别适用于中小型多人游戏的开发。以下是 Mirror 插件的一些关键特点和组件介绍: 简单高效:Mirror 以其简洁的 API 和高效的网络…...

掌握SEO:如何优化用ChatGPT生成的文章以提升搜索排名
在数字化时代,搜索引擎优化(SEO)已经成为网站流量的重要来源。随着人工智能技术的进步,越来越多的人开始使用ChatGPT等AI工具来生成文章。然而,虽然这些工具可以快速生成内容,但要确保这些内容在搜索引擎中…...

python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...