私は、現在のマウスの位置の隣にNSMenuの "コンテキストメニュー"を表示するアプリケーションに取り組んでいます。この時点で、コンテキストメニューを表示するためにWebViewからコマンドをトリガする方法を知っていますが、画面上の正しい位置にメニューが表示されないようです。私の座標は、私が必要とするものから垂直に反転したようです。このようなシンプルな問題のように思えますが、ベストプラクティスのベストプラクティスに努めています。マウスがどの画面にあるのか把握し、y座標を手動で計算する必要がありますか?マウスカーソルでNSMenuを表示する方法は?
- (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];
}
誰かが私にこれを成し遂げるための最も自然な方法のためのサンプルコードを提供していただけます:ここでは
が近づき、私は本当に簡単なコードです。
それを使用しています。私の顔の前で。ありがとう! – David