首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在监视器之间移动时,用CGDisplayMoveCursor移动鼠标光标时不按预期工作

在监视器之间移动时,用CGDisplayMoveCursor移动鼠标光标时不按预期工作
EN

Stack Overflow用户
提问于 2021-05-18 17:21:40
回答 1查看 219关注 0票数 1

因此,我需要能够移动鼠标到任何给定的点(x和y)。我试图用CGDisplayMoveCursor来完成它,当它移动游标时,它并没有把它放在我期望的地方。我的装备里有两台监视器。我通过NSScreen.screensi.frame获得帧,这些是他们的帧。

代码语言:javascript
复制
Built-in Retina Display
NSRect (0.0, 0.0, 1440.0, 900.0)

SwitchResX4 - LG HDR WQHD
NSRect (-1186.0, 900.0, 3840.0, 1600.0)

然后,当我收到新的点时,我使用NSRect.contains(NSPoint)来查找这两个监视器中的哪一个包含这个点。这部分如预期的那样工作。

但是,我想把光标移到那个点,但是它不像您所期望的那样工作(光标移动,而不是像您根据框架所期望的那样移动到点)。这是密码。

代码语言:javascript
复制
let point = NSPoint(x: x, y: y)
guard let monitor = Monitor.displayIdWithPoint(point) else {
      SendlogCallbackEvent("D", "", "Found nil in monitor with point", #function, #file, #line)
 }      
 if CGDisplayMoveCursorToPoint(monitor.directDisplayId, point) == CGError.failure {
     SendlogCallbackEvent("D", "", "CGError.failer to move cursor", #function, #file, #line)
  }

我读过,它可能与CG和NS如何以不同的方式处理坐标系有关,但我一直无法弄清楚如何使它工作。我如何将我的NSPoint“转换”成一个CGPoint,以便它与CGDisplayMove一起工作.函数。或者什么是最好的方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-18 18:35:25

这段代码片段:

代码语言:javascript
复制
let point = NSPoint(x: x, y: y)
guard let monitor = Monitor.displayIdWithPoint(point) else {
      SendlogCallbackEvent("D", "", "Found nil in monitor with point", #function, #file, #line)
}

给我的印象是,您正在查找的point是窗口系统坐标空间中的一个点(描述这两个窗口框架的坐标空间)。

但是,看看CGDisplayMoveCursorToPoint(_:_:)的文档,我们看到(强调我的):

在本地显示空间中的坐标。原点是指定显示的左上角.

因此,我认为您需要使用您的point,并对其进行转换,以便它相对于您想要的显示的起源:

代码语言:javascript
复制
let pointRelativeToScreen = point - monitor.frame.origin

if CGDisplayMoveCursorToPoint(monitor.directDisplayId, pointRelativeToScreen) == CGError.failure { ... }

或者,可能还有其他一些API,它期望在窗口系统的坐标中表示一个光标点,它会自动地为您绘制到右边的屏幕上。我现在无法访问Xcode,所以我无法亲自检查。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67591092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档