这是我非常简单的代码:
- (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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)