Caixas de diálogo modais

Uma caixa de diálogo modal deve ser uma janela pop-up com um menu de sistema, uma barra de título e uma borda espessa; ou seja, o modelo de caixa de diálogo deve especificar os estilos WS_POPUP, WS_SYSMENU, WS_CAPTION e DS_MODALFRAME. Embora um aplicativo pode designar o estilo WS_VISIBLE, o sistema sempre exibe uma caixa de diálogo modal independentemente de saber se o modelo de caixa de diálogo Especifica o estilo WS_VISIBLE. Um aplicativo não deve criar uma caixa de diálogo modal com o estilo estilo. Uma caixa de diálogo modal com esse estilo desativa próprio, impedindo qualquer entrada subseqüente acessem o aplicativo.

Um aplicativo cria uma caixa de diálogo modal usando o DialogBox ou DialogBoxIndirect função. DialogBox requer o nome ou identificador de um recurso que contém um modelo caixa diálogo; DialogBoxIndirect requer o identificador de um objeto de memória que contém um modelo caixa diálogo. O DialogBoxParam e DialogBoxIndirectParam funções também criar caixas de caixa de diálogo modal; eles são idênticos para as funções mencionadas anteriormente, mas passar um parâmetro especificado para o procedimento caixa de diálogo quando a caixa diálogo é criada.

Ao criar a caixa de diálogo modal, o sistema torna a janela ativa. A caixa de diálogo permanece ativa até que o procedimento de caixa de diálogo chama o EndDialog função ou o sistema ativa uma janela em outro aplicativo. Nem o usuário nem o aplicativo pode tornar a janela do proprietário ativo até que a caixa de diálogo modal for destruída.

Quando a janela do proprietário já não está desabilitada, o sistema desativa automaticamente a janela e todas as janelas filho que pertencem a ele quando ele cria a caixa de diálogo modal. A janela do proprietário permanece desativada até que a caixa de diálogo for destruída. Embora seja um procedimento de caixa de diálogo poderia permitir potencialmente a janela do proprietário a qualquer momento, permitindo que as derrotas de proprietário a finalidade da caixa de diálogo modal e não é recomendável. Quando o procedimento caixa de diálogo for destruído, o sistema permite a janela proprietária novamente, mas apenas se a caixa de diálogo modal causou o proprietário a ser desabilitado.

Como o sistema cria a caixa de diálogo modal, ele envia a mensagem WM_CANCELMODE à janela (se houver) atualmente capturar entrada mouse. Um aplicativo que recebe essa mensagem deve liberar a captura do mouse para que o usuário pode mover o mouse na caixa de diálogo modal. Porque o sistema desativa a janela do proprietário, todos entrada de mouse é perdida se o proprietário não solte o mouse em cima de receber esta mensagem.

Para processar mensagens para a caixa de diálogo modal, o sistema inicia seu próprio loop de mensagem, tomando o controle temporário da fila de mensagem para o aplicativo inteiro. Quando o sistema recupera uma mensagem que não esteja explicitamente para a caixa de diálogo, ele distribui a mensagem para a janela apropriada. Se ele recupera uma mensagem WM_QUIT , ele envia a mensagem para a fila de mensagem do aplicativo para que o loop de mensagem principal do aplicativo eventualmente possa recuperar a mensagem.

O sistema envia a mensagem WM_ENTERIDLE para a janela do proprietário sempre que a fila de mensagem do aplicativo está vazia. O aplicativo pode usar esta mensagem para realizar uma tarefa em segundo plano enquanto a caixa de diálogo permanece na tela. Quando um aplicativo usa a mensagem desta forma, o aplicativo deve ceder frequentemente controla (por exemplo, usando a função de PeekMessage ) assim que a caixa de diálogo modal pode receber entrada do usuário. Para impedir que a caixa de diálogo modal enviando as mensagens WM_ENTERIDLE, o aplicativo pode especificar o estilo DS_NOIDLEMSG ao criar a caixa de diálogo.

Um aplicativo destrói uma caixa de diálogo modal usando o EndDialog função. Na maioria dos casos, o procedimento de caixa de diálogo chama o EndDialog quando o usuário escolhe o comando fechar do menu do sistema da caixa de diálogo ou escolhe o botão OK ou Cancelar na caixa de diálogo. A caixa de diálogo pode retornar um valor através da função DialogBox (ou outras funções de criação), especificando um valor quando chamar o EndDialog função. O sistema retorna esse valor depois de destruir a caixa de diálogo. A maioria dos aplicativos usar esse valor de retorno para determinar se a caixa de diálogo concluído sua tarefa com êxito ou foi cancelada pelo usuário. O sistema não retorna o controle da função que cria a caixa de diálogo até que o procedimento caixa diálogo tem chamado de EndDialog função.

Index