Submenus são menus como quaisquer outros
Isso mesmo. O processo de criar um submenu é praticamente o mesmo de criar um menu "normal".
Para exemplificar o processo, vamos criar um menu "Exibir", com um submenu "Zoom". Neste caso, temos dois painéis, que serão declarados da seguinte maneira:
FXMenuPane *_viewMenu; FXMenuPane *_zoomMenu;
Lembrando que eles devem estar no escopo de classe, pois precisam ser liberados manualmente.
Percebam que o submenu "Zoom" nada mais é que um FXMenuPanel como todos os outros que já vimos até aqui. Agora vamos criá-los, novamente recuando o código para indicar a hierarquia.
_viewMenu = new FXMenuPane(this); _zoomMenu = new FXMenuPane(this); new FXMenuCommand(_zoomMenu, "&Aumentar\tCtrl++"); new FXMenuCommand(_zoomMenu, "&Normal\tCtrl+0"); new FXMenuCommand(_zoomMenu, "&Diminuir\tCtrl+-"); new FXMenuSeparator(_zoomMenu); new FXMenuCommand(_zoomMenu, "A&justar\tHome"); new FXMenuCascade(_viewMenu, "&Zoom", 0, _zoomMenu); new FXMenuTitle(menuBar, "&Exibir", 0, _viewMenu);
Explicando...
Na primeira linha, aloco o menu "Exibir".
Na segunda, aloco o (sub)menu "Zoom". Chamando atenção para o recuo, indicando que _zoomMenu será posicionado "dentro" de _viewMenu;
Nas linhas seguintes, preencho com alguns comandos e um separador. Nada além do trivial com recuo.
Em seguida, criamos a entrada no menu "Exibir" que vai expandir o menu "Zoom". Repetindo:
new FXMenuCascade(_viewMenu, "&Zoom", 0, _zoomMenu);
Os parâmetros são os mesmos de FXMenuTitle (comparem com a última linha):
- O FXComposite onde ficará localizado o submenu. Neste caso, adicionamos ao painel "Exibir"
- O título que vai aparecer no painel, com direito a mnemônico
- Ícone
- O painel que será exibido ao mover o mouse sobre o título.
Liberando
Como todo bom painel de menu, deve ser liberado manualmente:
delete _viewMenu; delete _zoomMenu;
Só uma observação: já tratei esse assunto aqui, então é só um lembrete. Quando eu falo em deletar manualmente, é porque estou usando o FOX 1.6. Na versão atual de desenvolvimento (1.7), existe uma classe chamada FXAutoPtr, que é um "ponteiro inteligente". Resumindo a história, ele guarda um ponteiro e automaticamente o libera quando sai de escopo. Veja a descrição aqui (na verdade, uma dúvida enviada à lista de discussão do FOX que eu traduzi e postei aqui).
Resultado
Eis o resultado do nosso submenu:
Nenhum comentário:
Postar um comentário