Pergunta

Eu tenho uma interface OpenGL GUI e preciso ter um menu pop -up que será chamado quando este um determinado botão for pressionado na minha tela OpenGL. Quero exibir um menu semelhante ao que aparece quando você pressiona um NSPOPUPBTOTON, mas não posso usar o próprio botão de cacau. Parece que a melhor maneira de conseguir isso é usar o NSpopupButtonCell. Não posso postar meu código aqui porque estou escrevendo o código em Lisp e acessando o cacau através de uma ponte C objetiva, mas só queria ver se o código PSEDUO seguinte parece que deve exibir o menu ou se há uma falha óbvia no meu 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.

Nenhum desses métodos foi bem -sucedido em obter qualquer tipo de menu a ser exibido. Existe outra maneira de aparecer programaticamente o menu contido na célula?

Foi útil?

Solução

Eu acho que você está procurando o trackMouse:inRect:ofView:untilMouseUp: método de NSCell

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

Outras dicas

Eu acho que você seria melhor usando uma planície NSMenu e chamando +[NSMenu popUpContextMenu:withEvent:forView:]. Se você está atingindo apenas 10,6 e mais tarde, também pode conferir -[NSMenu popUpMenuPositioningItem:atLocation:inView:], o que oferece um pouco mais de controle sobre o posicionamento do menu. Apenas implemente mouseDown: Na sua visualização, construa um menu (ou carregue -o de um arquivo de ponta) e exiba -o, e NSMenu deve cuidar de todos os detalhes a partir daí. Apenas certifique -se de que o alvo e a ação para cada NSMenuItem está definido para que o método de ação seja chamado corretamente quando um item é selecionado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top