我为 Mac 制作了一个 iphone 远程鼠标 Controller 应用程序:iPhone 应用程序将坐标值发送到 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。)

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

最佳答案

以下是获得正确 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

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

10-08 08:33