Question

J'ai une interface graphique openGL et je dois avoir un menu contextuel qui sera appelée lorsque cela un certain bouton est enfoncé dans mon écran openGL. Je veux afficher un menu similaire à celui qui apparaît lorsque vous appuyez sur une NSPopUPButton, mais je ne peux pas utiliser le bouton de cacao lui-même. Il semble que la meilleure façon d'y arriver est d'utiliser le NSPopupButtonCell. Je ne peux pas poster mon code ici parce que je suis en train d'écrire le code Lisp et d'accéder au cacao par un pont objectif C mais je voulais juste voir si le code pseduo suivant semble que ce devrait afficher le menu ou s'il y a une faille évidente dans mon logique:

• Pseudo Code for function that is called when button is pressed:
• Initialize an NSPopUpButtonCell Using initTextCell: "test" pullsDown: NO
• allocate an NSMenu using alloc
• add two menu items using addItem:
• set the menu of the popUpButtonCell to be the menu that was just allocated using setMenu:
• Next I tried two methods to try and get the menu to actually be displayed,
  first I tried using drawWithFrame:inView: and when that did not work I also tried 
  using drawBezelWithFrame:inView: eventhough the docs said not to use but I just 
  tried it out of desperation.
• finally, when the draw methods did not work I tried using performClick: on the 
  popupButtonCell to try and simulate the click.

Aucune de ces méthodes ont réussi à obtenir une sorte de menu pour afficher. Y at-il un autre moyen de pop programtically le menu contenu dans la cellule?

Était-ce utile?

La solution

Je pense que vous êtes à la recherche de la méthode trackMouse:inRect:ofView:untilMouseUp: de NSCell

[theCell trackMouse:[NSApp currentEvent] inRect:NSZeroRect ofView:theView untilMouseUp:YES];

Autres conseils

Je pense que vous seriez mieux d'utiliser une NSMenu simple et appeler +[NSMenu popUpContextMenu:withEvent:forView:]. Si vous ne 10.6 et ciblant plus tard, vous pouvez vérifier aussi -[NSMenu popUpMenuPositioningItem:atLocation:inView:], ce qui vous donne un peu plus de contrôle sur le positionnement du menu. Il suffit de mettre en œuvre mouseDown: dans votre vue, construire un menu (ou le charger à partir d'un fichier nib) et l'afficher, et NSMenu doit prendre soin de tous les détails à partir de là. Assurez-vous que la cible et l'action pour chaque NSMenuItem est réglé de telle sorte que la méthode d'action est appelée correctement lorsqu'un élément est sélectionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top