Pergunta

Tenho uma aplicação de diálogo em que eu quero ter itens de menu clicáveis ??no topo da caixa de diálogo. Esses itens não mostrar um menu suspenso, mas, na verdade, executar os comandos associados.

Eu fiz isso através da criação Popup = false nas propriedades diálogos e atribuindo uma mensagem-id, mas o meu problema é não ter a capacidade de desativar o item corretamente quando não faz sentido para o item a ser clicáveis ??(dependendo do estado interno armazenadas na caixa de diálogo)

Eu já descobri como desativar todos os itens do menu pop-up de pais de http://www.microsoft.com/msj/0299/c/c0299.aspx , mas isso não é exatamente o que eu quero

Eu também descobri como adicionar comando de menu encaminhamento para diálogos do MSDN Base de Conhecimento artigo KB242577.

Esta multa funciona para itens do sub-menu, mas não para o menu de nível superior.

Atualmente, estou usando a seguinte função para fazer a desativação

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
}

dessa metade obras, se você alt-tab longe do aplicativo Ele mostra como desativado, caso contrário, não.

Existe uma maneira de invalidar a área de programação?

Eu acho que uma mensagem de área não-cliente pode estar envolvido.

Foi útil?

Solução

Eu não tentei, mas na janela normal (não diálogo) CWnd :: DrawMenuBar deve fazer o que quiser. Pode funcionar com aplicativos baseados diálogo também.

void CYourDlg::EnableMenuItem(UINT nCommand, BOOL bEnable)
{
   CMenu* pMenu = GetMenu();
   pMenu->EnableMenuItem(nCommand, bEnable ? 0 : MF_DISABLED | MF_GRAYED);
   DrawMenuBar();
}

Outras dicas

Eu acho que você deve adicionar um manipulador de ON_UPDATE para o seu ID menu. Isto assegura que o menu é ativado / desativado quando você quiser.

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