WPF中如何获取鼠标相对于桌面的坐标

WPF中控件坐标及区域 wpf中的控件想要获取位置xiangu 阅读详情

看到别人的文章。

  WPF编程时,我们经常使用Mouse.GetPosition(IInputElement relativeTo)或MouseEventArgs.GetPosition(IInputElement relativeTo)来获取鼠标相对于某一界面元素的相对位置,这自然也联想到另外的一个问题:如何获取鼠标相对于屏幕的位置。 在WPF文档中找了半天也没找到。

  但我们别忘了 System.Windows.Forms.Control类中有一个静态属性System.Windows.Forms.Control.MousePosition,我们可以在WPF中继续使用它,当然这需要你的项目添加 System.Windows.Forms和 System.Drawing名字空间,这多少让人有些别扭,因为玩WPF时总有点不喜欢调用System.Windows.Forms下的东西,喜新厌旧吧。

  另外一个方法是平台调用,在VB的文档中可以找到一个API:Declare Function GetCursorPos Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI) As Long,我们可以在C#中使用它,代码如下:

以下是引用片段:
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Runtime.InteropServices;
  
  namespace Samples
  {
   class Win32
   {
   [StructLayout(LayoutKind.Sequential)]
   public struct POINT
   {
   public int X;
   public int Y;
  
   public POINT(int x, int y)
   {
   this.X = x;
   this.Y = y;
   }
   }
  
  
  
   [DllImport("user32.dll", CharSet = CharSet.Auto)]
   public static extern bool GetCursorPos(out POINT pt);
  
   }
  }


其实还可以直接使用PointToScreen(e.GetPosition(this)) 把相对窗口或控件的坐标转化为相对桌面坐标,不用这么麻烦


避坑指南:C#获取鼠标坐标时容易忽略的3个细节(DPI适配/多显示器/线程调用) 本文深入探讨了在C#开发中获取鼠标坐标时,开发者常忽略的三个关键细节:DPI适配、多显示器坐标系处理以及线程安全调用。文章通过原理分析和实战代码,详细讲解了如何在高分屏和多显示器环境下,通过正确配置DPI感知模式、使用Screen类处理虚拟桌面空间,以及利用Control.Invoke或异步模式确保跨线程UI更新的安全性,从而构建出健壮可靠的桌面应用程序。 阅读详情

相关推荐

C#鼠标中心缩放:坐标系推导与WinForms/WPF实现

在图形交互开发中,缩放是基础且高频的操作,而鼠标中心缩放要求屏幕固定点对应逻辑点不变,其核心在于坐标系变换与平移补偿。通过仿射变换矩阵,将屏幕坐标映射到世界坐标,并利用逆变换实现精确拾取。这一技术广泛应用于画板、看板、组态编辑器和图像标注工具,确保缩放时视觉焦点稳定。本文深入推导缩放矩阵公式,提供C#在WinForms和WPF下的代码实现,并分享边界处理与性能优化经验,帮助开发者避开常见陷阱。

weixin_34221654的博客 256

WPF 获取控件位置的方法

1.获取鼠标在控件中的坐标 //在Mouse相关的事件中的方式   void item_MouseDown(object sender, MouseButtonEventArgs e) {     Point point = e.GetPosition(canvas);  } //或者Mouse的静态方法GetPosition() 获取与指定元素相对的鼠标位置=>等同于上面      Point point = Mouse.GetPo

technologyleader的专栏 7425

WPF中获取鼠标相对于屏幕的位置

WPF编程时,我们经常使用Mouse.GetPosition(IInputElement relativeTo)或MouseEventArgs.GetPosition(IInputElement relativeTo)来获取鼠标相对于某一界面元素的相对位置,这自然也联想到另外的一个问题:如何获取鼠标相对于屏幕的位置。 在WPF文档中找了半天也没找到。

WPF中获取鼠标相对于桌面位置

var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; var mouse = transform.Transform(GetMousePosition()); public System.Windows.Point GetMousePosition() { ...

weixin_34211761的博客 222

固定资产报废的损失鉴定怎么做?

在社会生产的日常中,企业经常会遇到固定资产报废的损失鉴定,那么怎么去做鉴定?哪些情况下能申请固定资产报废损失鉴定呢? 今天,华碧鉴定就和大家说一说固定资产报废损失鉴定那些事儿。 符合下列条件之一的固定资产可申请报废: 1、使用年限过长,功能丧失,完全失去使用价值,或不能使用并无修复价值的; 2、产品技术落后,质量差,耗能高,效率低,已属淘汰且不适于继续使用,或技术指标已达不到使用要求的; 3、严重损坏,无法修复的或虽能修复,但累计修理费已接近或超过市场价值的; 4、主要附件损坏,无.

weixin_50362670的博客 2116

<Verilog实现除法器> Verilog实现牛顿-拉夫逊(Newton-Raphson)除法器

阿斯顿阿斯顿啊啊是打发士大夫

IC跳跳鱼的博客 3586

VS编程,WPF中,获取鼠标相对于当前屏幕坐标的一种方法

简单的做法参见:https://www.cnblogs.com/tommy-huang/p/5282966.html 1、获取控件在Window中的坐标: Window window = Window.GetWindow(canvas); Point point = canvas.TransformToAncestor(window).Transform(new Point(0...

君一席 5002

[pcie]gen6 下 L0p

000b~100b: 触发L0p 操作流程协商工作link width 到target link width.为111b:link width 硬件动态调整。硬件动态:Device control 3 register.target link width=111b当pcie链路检测到空闲状态时,设备可以主动进入L0p状态。L0p 是pcie gen6 新引入的链路状态,是L0的子状态。(5)LINK WIDTH:当LINK WIDTH CHANGE.cmd为Request时表示请求的链路宽度。

BIG_APPLE1的博客 1676

WPF 获得鼠标相对于屏幕的位置,相对于控件的位置

原文:WPF 获得鼠标相对于屏幕的位置,相对于控件的位置相对于屏幕的位置   第一步:     /// <summary>    /// 用于获得鼠标相对于屏幕的位置    /// </summary>    public class Win32    {        [StructLayout(LayoutKind.Sequential)]        publi...

weixin_33953249的博客 444

Red Hat Enterprise Linux 9.2

安装Red Hat Enterprise Linux 9.2

zhurobert的博客 942

为什么大语言模型推理要分成 Prefill 和 Decode?深入理解这两个阶段的真正意义

Prefill 阶段是语言模型推理中的第一个步骤,它负责处理你输入的所有上下文内容(prompt),为后续生成打下基础。“请解释一下 Transformer 的原理。这句话会被 tokenizer 编码为一串 token,比如["请", "解释", "一下", "Trans", "##former", "的", "原理", "。"]。然后这些 token 会进入 Transformer 模型进行前向传播。重点来了 👇。

Harry的博客 1万+

C# 获取鼠标坐标

功能:C# 获取鼠标坐标界面展示出来 环境:vs2010,wpf 界面代码:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         Title="Ma

youqingyike的专栏 1965

基于文件通信的QMT量化交易信号桥接方案设计与实现

在量化交易系统开发中,进程间通信(IPC)是连接不同计算模块、实现策略逻辑与交易执行解耦的关键技术。其核心原理在于允许运行于独立环境或进程的程序安全、可靠地交换数据。文件系统通信作为一种经典的IPC方法,因其实现简单、跨平台兼容性好且数据可持久化,在非高频场景下具有重要技术价值。它尤其适用于需要将外部复杂计算环境(如配备丰富数据科学库的Python环境)与专用交易终端(如迅投QMT)集成的应用场景。通过约定文件路径与数据格式,外部程序可将包含交易指令的JSON信号文件写入特定目录,而交易终端通过轮询或监听机

weixin_28678151的博客 419

C# 获取当前鼠标位置

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

学习和分享 3177

Unreal从入门到精通之 UE4 vs UE5 VR性能优化实战

这篇文章分享了UE5 VR项目的性能优化经验。作者通过对比UE4和UE5的VR模板性能,发现UE5默认帧率只有45FPS,远低于UE4的100FPS。主要性能瓶颈来自Lumen全局光照、虚拟阴影贴图等新特性。文章详细列出了12项关键优化设置,包括禁用Lumen、关闭虚拟阴影、使用前向渲染等,并分析了各项调整对性能的影响程度。特别指出删除默认的VolumetricCloud可立即提升5帧。最后建议根据场景需求平衡画质与性能,对于高帧率要求的VR项目,可能需要谨慎使用UE5或关闭其部分高级渲染功能。

TxNet 1383

ESM2蛋白预训练模型 蛋白质、氨基酸向量表示

参考: https://github.com/facebookresearch/esm https://huggingface.co/facebook/esm2_t33_650M_UR50D https://esmatlas.com/resources?action=fold tokenizer_对输入蛋白会头尾添加cls、eos特殊字符,占两个字符长度 参考:https://github.com/facebookresearch/esm 直接clone下来代码

weixin_42357472的博客 1万+

C# 获得当前鼠标的屏幕中间坐标:从 WinForms 到 WPF 的跨框架实现与验证

C# 获取鼠标屏幕坐标时,WinForms 用 Cursor.Position 一行搞定,WPF 则需 PointToScreen 配合 PerMonitorV2 清单处理多屏 DPI。本文给出可复制的坐标换算与日志验证方法,并整理 401、local proxy failed 等常见报错排查,助你快速定位鼠标跑偏问题。详见 TaoToken 官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_42594419的博客 194

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WPF集成ScottPlot 5.0:实现鼠标交互式坐标实时捕获与显示

本文详细介绍了如何在WPF应用中集成ScottPlot 5.0实现鼠标交互式坐标实时捕获与显示。通过解析坐标转换原理、处理鼠标事件及性能优化技巧,帮助开发者快速构建高效的数据可视化功能,特别适合工业监控等需要精确数据交互的场景。

weixin_27051161的博客 214

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C# 获取鼠标与控件屏幕坐标:从 Screen 到 PointToScreen 的完整实践

C# 坐标转换总在真机翻车?用 Control.PointToScreen 与 MousePosition 统一控件、鼠标与屏幕坐标,附可复制 CoordinateHelper 工具类与多显示器验证步骤。配合 TaoToken 生成测试矩阵,快速排查 401 与坐标偏移问题。详见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_34598113的博客 219

WPF实战:基于鼠标中心的图像缩放与拖拽实现详解

本文详细介绍了在WPF中实现基于鼠标中心的图像缩放与拖拽功能的技术方案。通过TransformGroup结合ScaleTransform和TranslateTransform,解决了传统实现中缩放中心固定、图像跳动等问题,并提供了性能优化和MVVM模式实现的实用技巧,适合C#开发者提升图像交互体验。

weixin_29209801的博客 336

Windows API GetCursorPos()在WPF程序中无法获取鼠标坐标的问题(已经解决)——TaoToken 统一 Key 通道下的排查记录

WPF 中 GetCursorPos 返回物理像素,与 DIP 逻辑坐标不一致导致鼠标坐标偏移。本文给出 App.manifest 的 PerMonitorV2 配置、POINT 结构体声明与坐标转换代码,并用 TaoToken 统一 Key 通道交叉验证排查结果,官网见 https://taotoken.net/?utm_source=taotoken_aicg_blog_end 。

weixin_35748962的博客 10

wpf 获取桌面上的鼠标位置

先开一个Timer或者线程 DispatcherTimer timer = new DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(1000);//1秒 timer.Tick += Timer_Tick; timer.Start(); private void Timer_Tick(object...

anyan1858的博客 178
上一篇: 在winform程序中启动wpf窗体
下一篇: Windows 8 Metro 应用开发入门(一):开发环境介绍
fighter_yy
博客等级 码龄20年 22粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值