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