2009-09-14 5 views
7

Escribí una pequeña aplicación que vive en NSStatusBar. Quiero tener un atajo global que, cuando se pulsa, se muestre el contenido de la barra de menú, exactamente como el comportamiento de Spotlight. Agregué un atajo de tecla global a mi aplicación, pero no puedo mostrar la barra de meun. ¿Cómo puedo hacer esto? Intenté con "popUpContextMenu", pero ese método muestra el menú en la esquina inferior izquierda, quiero que el menú se abra justo debajo del icono del menú NSStatusBar.¿cómo se muestra un NSMenu programáticamente?

Respuesta

0

No creo que haya una forma admitida de hacerlo sin quizás utilizar el marco de Accesibilidad para simular un clic en su elemento de estado. De todos modos, probablemente no sea una buena idea abusar de un menú de esta manera.

El elemento de la barra de menú de Spotlight no usa un NSMenu, usa una ventana/vista personalizada. Puede considerar seguir esta ruta si tiene algún tipo de vista personalizada para mostrar.

+0

¿Estás seguro? El inspector de accesibilidad dice que es un AXMenu con AXMenuItems, y no estoy seguro de que quieran volver a implementarlo. Los menús son tremendamente difíciles de hacer funcionar de la misma manera dos veces. –

+0

No creo que lo que estoy haciendo se considere abuso, quiero tener exactamente la misma funcionalidad que la ayuda y el centro de atención. Puedo hacerlo sin usar nsmenu si es posible, pensé que estaban usando nsmenu también. –

5

Puede hacerlo, apple proporciona un método para "popUpStatusItemMenu"

+2

http://developer.apple.com/mac/library/documentation/Cocoa/Reference/ApplicationKit/Classes/NSStatusItem_Class/Reference/Reference.html#//apple_ref/occ/instm/NSStatusItem/popUpStatusItemMenu: –

+0

Un problema que encontré sin embargo, es que no resalta el ícono en la barra de menú como lo hace el foco al hacer clic en él. –

Cuestiones relacionadas