2010-02-04 4 views
1

Je travaille sur une application qui a besoin d'afficher un menu contextuel à l'écran dans divers scénarios. Dans la fonction que j'écris, je n'ai pas accès à NSWindows ou NSViews. Je voudrais utiliser popUpMenuPositioningItem: atLocation: inView car cette fonction fonctionne parfaitement pour moi dans 10.6. Cependant, nous avons besoin de supporter 10.5, donc cette fonction n'est pas disponible pour moi.Vous recherchez popUpMenuPositioningItem: atLocation: inView: équivalent pour 10,5

La fonction que je suis plus intéressé, comme indiqué dans la documentation est:

Si la vue est nul, l'emplacement est interprété dans l'écran système de coordonnées . Cela vous permet de faire apparaître un menu déconnecté de n'importe quelle fenêtre.

Fondamentalement, j'ai besoin d'afficher le menu contextuel donné un emplacement à l'écran, mais sans aucune vue associée.

Y at-il moyen d'y parvenir sur 10,5?

Répondre

0

Je ne sais pas comment le faire à Cocoa, mais vous pourriez peut-être utiliser la fonction carbone PopUpMenuSelect.

+0

Merci, mais je dois éviter le carbone. Aussi, je crois que PopUpMenuSelect est obsolète. –

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]; 
Questions connexes