Pergunta

Eu tenho um diálogo (CDialog derivados classe) que pode ser usado de duas maneiras diferentes (modo de edição e programação).

Quando o diálogo é aberto a ser utilizado no modo de programação é uma caixa de diálogo modal que ele é usado para modificar a vista principal (tipo de uma barra de ferramentas). Quando está aberto no modo de edição, o usuário pode alterar a configuração do próprio diálogo e, neste caso, é um diálogo modal.

Agora eles são dois diálogos diferentes com algumas diferenças e eu gostaria de ter apenas de diálogo quiser e deixar a mudança de usuário entre a programação Modo e edição premindo apenas um botão na caixa de diálogo.

Então eu preciso converter o modal de diálogo em um modal de diálogo e vice-versa durante a execução. Existe uma maneira de achive isso?

Graças.

Foi útil?

Solução

Como talvez alguém poderia estar interessado em fazer algo semelhante no futuro, esta é a maneira que eu finalmente fiz isso:

Eu uso isso duas funções do quadro principal:. CMainFrame::BeginModalState() e CMainFrame::EndModalState()

O problema com estas funções é o mesmo que com a desativação janela pai. A janela que você quer fazer modal também fica desativado. Mas a solução é fácil, basta re-habilitar a janela depois de chamar BeginModalState.

void CMyDialog::MakeModal()
{
   //disable all main window descendants
   AfxGetMainWnd()->BeginModalState();

   //re-enable this window
   EnableWindow(TRUE);
}

void CMyDialog::MakeModeless()
{
   //enable all main window descendants
   AfxGetMainWnd()->EndModalState();
}

Obrigado por sua ajuda.

Outras dicas

Isso não pode ser feito facilmente sem fechar e reabrir o diálogo. Em seguida, você pode chamar ShowWindow ou DoModal conforme o caso.

Isso não é correto. Isso pode ser feito, se você olhar na fonte de MFC você vai perceber que é diálogos modais não são tecnicamente ainda modal. Você vai ter que fazer um monte de mucking para fazer este trabalho corretamente, mas basicamente você só tem que desativar o pai de 'modal' janela, e reativá-lo quando o 'modal' fecha a janela.

Eu tenho feito isso pessoalmente para isso pode funcionar para você, embora eu não sou exatamente certo o que você está tentando fazer.

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