1

我正在开发一个需要在各种情况下在屏幕上显示上下文菜单的应用程序。在我正在编写的函数中,我无权访问任何 NSWindows 或 NSViews。我想使用 popUpMenuPositioningItem:atLocation:inView 因为这个函数在 10.6 中非常适合我。但是,我们需要支持 10.5,因此我无法使用此功能。

如文档中所述,我最感兴趣的功能是:

如果 view 为 nil,则在屏幕坐标系中解释位置。这允许您弹出一个与任何窗口断开连接的菜单。

基本上,我需要在屏幕上显示给定位置的上下文菜单,但没有任何关联的视图。

有没有办法在 10.5 上实现这一点?

4

2 回答 2

1
// Set up the button cell, converting to NSView coordinates. The menu is
// positioned such that the currently selected menu item appears over the
// popup button, which is the expected Mac popup menu behavior.
NSPopUpButtonCell* button = [[NSPopUpButtonCell alloc] initTextCell:@""
                                                          pullsDown:NO];
[button autorelease];
[button setMenu:menu_];
// We use selectItemWithTag below so if the index is out-of-bounds nothing
// bad happens.
[button selectItemWithTag:index];
[button setFont:[NSFont menuFontOfSize:fontSize_]];

// Create a dummy view to associate the popup with, since the OS will use
// that view for positioning the menu.
NSView* dummyView = [[[NSView alloc] initWithFrame:bounds] autorelease];
[view addSubview:dummyView];
NSRect dummyBounds = [dummyView convertRect:bounds fromView:view];

// Display the menu, and set a flag if a menu item was chosen.
[button performClickWithFrame:dummyBounds inView:dummyView];

if ([self menuItemWasChosen])
  index_ = [button indexOfSelectedItem];

[dummyView removeFromSuperview];
于 2010-12-23T04:22:01.937 回答
0

我不知道如何在 Cocoa 中执行此操作,但您可以使用 Carbon 函数 PopUpMenuSelect。

于 2010-04-05T19:18:43.583 回答