我为 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
这在我的控制鼠标位置的应用程序中有效。