Pregunta

Tengo una interfaz gráfica OpenGL y tengo que tener un menú emergente que se llamará cuando esto un determinado botón se pulsa en mi pantalla OpenGL. Quiero mostrar un menú similar a la que aparece cuando se pulsa un NSPopUPButton pero no puede usar el botón de cacao en sí. Parece que la mejor manera de lograr esto es utilizar el NSPopupButtonCell. No puedo publicar mi código aquí porque estoy escribiendo el código en Lisp y acceder al cacao a través de un puente de C objetiva pero yo sólo quería ver si el siguiente código pseduo parece que debería mostrar el menú o si hay una falla obvia en mi lógica:

• 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.

Ninguno de estos métodos tuvieron éxito en conseguir cualquier tipo de menú que se mostrará. ¿Hay alguna otra manera de hacer estallar programtically el menú de contenido en la célula?

¿Fue útil?

Solución

Creo que busca el método trackMouse:inRect:ofView:untilMouseUp: de NSCell

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

Otros consejos

Creo que sería mejor usar un NSMenu simple y llamando +[NSMenu popUpContextMenu:withEvent:forView:]. Si está destinada a una audiencia sólo el 10,6 y más tarde, es posible que también echa un vistazo a -[NSMenu popUpMenuPositioningItem:atLocation:inView:], que le da un poco más de control sobre el posicionamiento del menú. Sólo aplicar mouseDown: en su opinión, la construcción de un menú (o cargarla desde un archivo de mina), y mostrarlo, y NSMenu debe tener cuidado de todos los detalles de allí. Sólo asegúrese de que el objetivo y la acción para cada NSMenuItem se establece de modo que el método se llama a la acción correctamente cuando se selecciona un elemento.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top