当前位置: 首页 > article >正文

C# 获取当前鼠标位置

在C#中,获取当前鼠标位置可以通过多种方式实现,但最常见和直接的方法之一是使用System.Windows.Forms命名空间中的Cursor类或者Control类的PointToClient(如果你正在处理WinForms应用程序)或Windows.UI.Core.CoreWindowPointerPosition(如果你在处理UWP应用程序)。不过,对于大多数桌面应用程序(如WinForms或WPF),使用Cursor类是最简单的方法。

WinForms应用程序

在WinForms应用程序中,你可以使用Cursor.Position来获取屏幕上的鼠标位置。如果你想要得到这个位置相对于某个特定控件的坐标,你可以进一步使用Control.PointToClient方法。

// 获取屏幕上的鼠标位置
Point screenPoint = Cursor.Position;

// 如果你有一个WinForms控件,并想获取鼠标相对于该控件的位置
Control myControl = this; // 假设这是你想要获取鼠标位置的控件
Point clientPoint = myControl.PointToClient(screenPoint);

// 现在你可以使用clientPoint变量了,它包含了鼠标位置相对于myControl的坐标

WPF应用程序

在WPF中,没有直接对应Cursor.Position的属性,但你可以通过System.Windows.Interop命名空间下的Win32方法或者通过附加属性来实现。然而,一个简单的解决方案是使用System.Windows.FormsCursor.Position(尽管这通常不被推荐在纯WPF应用程序中),或者通过P/Invoke调用Windows API。

但是,更常见的是在WPF中监听鼠标事件(如MouseMove)来获取鼠标的当前位置,这通常是通过事件参数(如MouseEventArgs)中的GetPosition方法完成的。

// 在WPF中,你通常不会直接获取全局鼠标位置,而是在事件处理中获取
private void MyControl_MouseMove(object sender, MouseEventArgs e)
{
    // 获取鼠标位置,相对于触发事件的控件
    Point position = e.GetPosition((UIElement)sender);

    // 如果你想要获取屏幕上的坐标,你可以使用
    Point screenPoint = e.GetPosition(null);
}

注意:GetPosition(null)用于获取相对于屏幕的坐标,而GetPosition((UIElement)sender)用于获取相对于触发事件的控件的坐标。

跨平台解决方案

如果你正在开发跨平台的应用程序(如使用.NET Core 3.x或更高版本的WPF或MAUI),你可能需要依赖于更通用的API,这些API可能因平台而异,或者你可能需要使用条件编译来根据目标平台包含不同的代码段。

总的来说,选择哪种方法取决于你的具体需求以及你正在开发的应用程序类型。对于大多数桌面应用程序,上述方法应该足够了。


http://www.kler.cn/a/294663.html

相关文章:

  • WPF中的ResizeMode
  • Qt初识简单使用Qt
  • mapreduce 将数据清洗后保存到 hbase
  • MySQL如何利用索引优化ORDER BY排序语句
  • 简单的签到程序 python笔记
  • [免费]SpringBoot+Vue3校园宿舍管理系统(优质版)【论文+源码+SQL脚本】
  • ansible--yaml
  • SOMEIP_ETS_092: SD_Check_Reaction_to_a_Subscribe_with_ttl_0
  • css前段知识点分享
  • pytest运行方式及前置后置封装详解
  • Docker 进阶构建:镜像、网络与仓库管理
  • mariadb容器
  • 8阶段项目:五子棋(附带源码)
  • 服务器数据恢复—infortrend存储中RAID6数据恢复案例
  • 资料分析系统课-刘文超老师
  • ​T​P​三​面​
  • SIGMOD-24概览Part7: Industry Session (Graph Data Management)
  • Wni11 下 WSL 安装 CentOS
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习进阶task3:批量归一化
  • 牛客小白月赛100(A,B,C,D,E,F三元环计数)
  • 【手撕数据结构】二叉树的性质
  • 香橙派修改MAC
  • 【代码随想录训练营第42期 Day48打卡 - 单调栈 - LeetCode 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
  • VitePress 自定义主题:打造专属文档网站
  • 了解elementUI的底层源码, 进行二次开发
  • 云服务器内网穿透连接云手机配置ALAS