4

我为 Mac 制作了一个 iphone 远程鼠标控制器应用程序:iPhone 应用程序将坐标值发送到 Mac,然后 Mac 处理鼠标位置值。

要获取 Mac 上的当前鼠标位置,接收器调用 [NSEvent mouseLocation]。

x 的值总是正确的,但 y 的值是错误的。

我使用“while”循环来处理这个事件。

while (1) {
    mouseLoc = [NSEvent mouseLocation];

    while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
          CGPoint temp;
          temp.x = mouseLoc.x;
          temp.y = mouseLoc.y; // wrong value
          ........

y 值在每个循环周期都不同。例如,第一次循环时 y 值为 400,下一次循环时 y 值为 500;然后 y 在下一个循环中再次为 400。

鼠标指针不断上下,两个不同的y值之和总是900。(我想是因为屏幕分辨率是1440 * 900。)

我不知道它为什么会发生,该怎么做,以及如何调试它。

4

4 回答 4

4

这是一种获得正确 Y 值的方法:

while (1) {
mouseLoc = [NSEvent mouseLocation];
NSRect screenRect = [[NSScreen mainScreen] frame];
NSInteger height = screenRect.size.height;

while ((msgLength = recv(clientSocket, buffer, sizeof(buffer), 0)) != 0) {
      CGPoint temp;
      temp.x = mouseLoc.x;
      temp.y = height - mouseLoc.y; // wrong value
      ........

基本上,我已经抓住了屏幕高度:

NSRect screenRect = [[NSScreen mainScreen] frame];
NSInteger height = screenRect.size.height;

然后我取屏幕高度并从中减去 mouseLocation 的 Y 坐标,因为 mouseLocation 从底部/左侧返回坐标,这将为您提供顶部的 Y 坐标。

temp.y = height - mouseLoc.y; // right value

这在我控制鼠标位置的应用程序中有效。

于 2012-04-12T07:27:54.807 回答
2

我不知道为什么它会在没有看到更多代码的情况下发生变化,但很有可能它与mouseLoc = [NSEvent mouseLocation];返回一个原点位于屏幕左下角而不是顶部的点有关离开了通常的地方。

于 2011-12-15T23:35:24.363 回答
1

获取正确的位置代码:

CGPoint mousePoint = CGPointMake([NSEvent mouseLocation].x, [NSScreen mainScreen].frame.size.height - [NSEvent mouseLocation].y);
于 2013-01-25T18:36:24.853 回答
0

斯威夫特 5:

let mousePosition = CGPoint(x: NSEvent.mouseLocation.x, y: (NSScreen.main?.frame.size.height)! - NSEvent.mouseLocation.y)
于 2021-07-28T18:15:18.137 回答