Objective c 使用多个屏幕时从本地坐标扭曲光标

Objective c 使用多个屏幕时从本地坐标扭曲光标,objective-c,cocoa,Objective C,Cocoa,我尝试使用NSWindow局部坐标扭曲鼠标(但我从px中的局部坐标开始,而不是从pt开始,y轴反转) 但是,结果在我的一个屏幕上是意外的,x轴是正确的,但y轴关闭了280pt。 这个值不是随机的,它对应于我正在使用的两个屏幕之间的间隙:左侧为1280*800(pt),第二个为1920*1080(pt)(左侧为2,右侧为1) 在左屏幕上,鼠标准确地扭曲到它应该的位置(如果我读取了它的局部坐标,它们与我要求它扭曲到的坐标相对应)。可可屏幕坐标的原点位于主屏幕的左下角。核心图形坐标的原点位于主屏幕的左

我尝试使用NSWindow局部坐标扭曲鼠标(但我从px中的局部坐标开始,而不是从pt开始,y轴反转)

但是,结果在我的一个屏幕上是意外的,x轴是正确的,但y轴关闭了
280pt
。 这个值不是随机的,它对应于我正在使用的两个屏幕之间的间隙:左侧为
1280*800
(pt),第二个为
1920*1080
(pt)(左侧为
2
,右侧为
1


在左屏幕上,鼠标准确地扭曲到它应该的位置(如果我读取了它的局部坐标,它们与我要求它扭曲到的坐标相对应)。

可可屏幕坐标的原点位于主屏幕的左下角。核心图形坐标的原点位于主屏幕的左上角。因此,必须使用主屏幕的高度在两者之间进行转换

你有:

  const float screenHeight = [[m_window screen] frame].size.height;
  point.y = screenHeight - point.y;
你需要:

  const float screenHeight = [[NSScreen screens][0] frame].size.height;
  point.y = screenHeight - point.y;

NSRect
没有名为
local
的字段,因此不会编译
rect.local=local
。您最好在问题中加入真实的、未修改的代码。您这样做是对的。是否有理由使用事件点击而不是
CGWarpMouseCursorPosition
?我不了解关于事件点击的讨论从何而来或正在进行,但您是否考虑过使用
CGAssociateMouseAndMouseCursorPosition(false)
防止鼠标移动时光标移动?您将继续获得鼠标移动事件。位置不会更改,但它们将携带有效的
deltaX
deltaY
值。是的,如果您希望跟踪鼠标移动而不让光标移动,则可以使用
CGAssociateMouseandMouseCorPosition
。我用过它,它比扭曲光标要简单得多。我明白了,所以屏幕的全局坐标和核心图形的坐标是不同的。谢谢!
  const float screenHeight = [[NSScreen screens][0] frame].size.height;
  point.y = screenHeight - point.y;