cocoa – 如何在鼠标光标处显示NSMenu?

cocoa – 如何在鼠标光标处显示NSMenu?,第1张

概述我正在开发一个应用程序,我想在当前鼠标位置旁边显示一个NSMenu“上下文菜单”.此时,我知道如何从WebView触发命令来显示上下文菜单,我似乎无法让菜单显示在屏幕上的正确位置.看起来我的坐标是从我需要的垂直方向倒置的.这似乎是一个简单的问题,但我花了很多时间来尝试最好的“最佳实践”解决方案.我是否需要确定鼠标所在的屏幕并手动计算y坐标? 这是我非常简单的代码: - (IBAction)show 我正在开发一个应用程序,我想在当前鼠标位置旁边显示一个NSMenu“上下文菜单”.此时,我知道如何从WebVIEw触发命令来显示上下文菜单,我似乎无法让菜单显示在屏幕上的正确位置.看起来我的坐标是从我需要的垂直方向倒置的.这似乎是一个简单的问题,但我花了很多时间来尝试最好的“最佳实践”解决方案.我是否需要确定鼠标所在的屏幕并手动计算y坐标?

这是我非常简单的代码:

- (IBAction)showMenu:(ID)sender{    CGEventRef ourEvent = CGEventCreate(NulL);    CGPoint point = CGEventGetLocation(ourEvent);    NSPoint wp = {0,0};    wp = [self.window convertScreenToBase:point];    NSLog(@"Location? x= %f,y = %f",(float)point.x,(float)point.y);    NSLog(@"Location? x= %f,(float)wp.x,(float)wp.y);    NSEvent *event = [NSEvent mouseEventWithType:NSleftMouseUp location:CGPointMake(wp.x,wp.y) modifIErFlags:0 timestamp:NSTimeIntervalSince1970 windowNumber:[_window windowNumber]  context:nil eventNumber:0 clickCount:0 pressure:0.1];    //NSEvent *event = [NSEvent eventWithCGEvent:ourEvent];    NSMenu *themenu = [[NSMenu alloc] initWithTitle:@"Contextual Menu"];    [themenu insertItemWithTitle:@"Item 1" action:@selector(beep:) keyEquivalent:@"" atIndex:0];    [themenu insertItemWithTitle:@"Item 2" action:@selector(beep:) keyEquivalent:@"" atIndex:1];    [NSMenu popUpContextMenu:themenu withEvent:event forVIEw:nil];}

有人可以提供示例代码,以最自然的方式来完成这项工作.

解决方法 你正在混合Quartz和Cocoa. API之间有很多重叠,如果你只坚持一个,那就这样做.改为:

NSPoint point = [NSEvent mouseLocation];

Quartz和Cocoa使用不同的坐标系:Quartz在左上角使用“硬件地址”样式坐标(0,0),Cocoa在左下角使用“数学”样式坐标和(0,0).

总结

以上是内存溢出为你收集整理的cocoa – 如何在鼠标光标处显示NSMenu?全部内容,希望文章能够帮你解决cocoa – 如何在鼠标光标处显示NSMenu?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1006008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存