gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 16:10:37 26 4
gpt4 key购买 nike

我正在开发一个应用程序,我想在当前鼠标位置旁边显示 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, y = %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?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571323/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com