Como adicionar submenu a um CMENU no MFC?
Pergunta
Eu tenho um aplicativo MFC que usa CMENU para a barra de menus principal.
Não consegui criar submenus com sucesso.
Eu posso ter o primeiro nível de arquivo, editar, ver, etc. e seus submenus, mas não posso criar um submenu fora de um desses menus.
Por exemplo, eu gostaria de poder ir ao arquivo-> itens recentes->Lista de itens no submenu
Eu posso fazer isso com bastante facilidade com o editor de recursos no VS, mas isso precisa ser feito dinamicamente.
Estou usando a classe certa em Cmenu? Alguma sugestão sobre o que tentar?
Não encontrei nenhum tutorial decente. Até me apontar para o certo seria útil.
Solução
Use seu editor de recursos para adicionar um submenu contendo um item de espaço reservado. Em seguida, você pode pegar uma referência a este submenu, adicionar itens a ele e excluir o item de espaço reservado:
CMenu *subMenu = mainMenu.GetSubMenu( menuPosition );
if( subMenu )
{
for( unsigned i = 0; i < stringArray.size(); i++ )
{
subMenu->AppendMenu( MF_STRING, 400 + i, stringArray[i]);
}
subMenu->DeleteMenu( ID_SUBMENU_PLACEHOLDER, MF_BYCOMMAND );
}
Outras dicas
Eu tive que fazer a mesma coisa hoje, estou no vs2008 com o pacote de recursos (novo material da interface do usuário) e estava olhando para as amostras, e há amostra sobre como adicionar itens de menu dinamicamente (http://msdn.microsoft.com/en-us/library/bb983167.aspx)
Você precisa substituir o método CFRAMEWNDEX :: ONSHOWPOPUPMENU.
Máx.