INFO: Criar uma caixa de diálogo não modal com bibliotecas MFC

Traduções de Artigos Traduções de Artigos
Artigo: 103788 - Ver produtos para os quais este artigo se aplica.
Este artigo demonstra como criar uma caixa de diálogo não modal utilizando um recurso de modelo de caixa de diálogo utilizando o MFC.

Para criar uma caixa de diálogo CModeless, devem ser seguidos os seguintes passos:

  1. Criar uma classe de diálogo derivada de CDialog e substituir a função de membro Create() de CDialog. Por exemplo, pode ter código semelhante ao seguinte:
          class CModeless: public CDialog
               {
                 .
                 .
                 .
                 public:
                     CModeless(){ }
                     BOOL Create(UINT nID, CWnd * pWnd)
                          { return CDialog::Create(nID,pWnd);}
                 .
                 .
                 .
               };
    				
    Nota: pode permitir que ClassWizard gerar a classe de diálogo e adicione simplesmente a função Create().
  2. Escreva código para construir um objecto da classe de diálogo e criar a janela da caixa de diálogo. Por exemplo, se tiver um item de menu que deve apresentar a caixa de diálogo, pode ter código semelhante ao seguinte:
          void CMainFrame::OnModeless()
            {
                pdlg = new CModeless;
                pdlg->Create(IDD_DIALOG1,this);
            }
    				
    onde CMainFrame::pdlg é definido como:
    CModeless * pdlg;
    NOTA: É importante atribuir o objecto da pilha em vez da pilha se pretender impedir que a caixa de diálogo não modal a ser destruído quando a função é terminada.
  3. Tem de chamar CWnd::DestroyWindow() no OnCancel ou sempre que a caixa de diálogo não modal tem de ser destruído.
          void CModeless::OnCancel()
          {
              DestroyWindow();
          }
    				
  4. Substituir CWnd::PostNcDestroy() na sua classe de diálogo para eliminar o objecto de caixa de diálogo:
       virtual void CModeless::PostNcDestroy() {delete this;}
    				
    PostNcDestroy() é uma função de membro virtual da classe CWnd que é chamada pela função OnNcDestroy().
Uma classe de diálogo não modal, normalmente, irá substituir o OnOK() e membro OnCancel() funciona para chamar DestroyWindow() e não deve chamar as funções de CDialog::OnOK() e CDialog::OnCancel() de classe base. As funções CDialog::OnOK() e CDialog::OnCancel() chamar EndDialog(). Deve ser chamado EndDialog() apenas quando utilizar caixas de diálogo modal.

Se estiver a utilizar DDX (caixa de diálogo Data Exchange) e validação de dados da caixa de diálogo (DDV), é OnOK() processador para a classe de diálogo poderá assemelhar-se o seguinte:
   void CModeless::OnOK()
   {
           if (!UpdateData(TRUE))
             {
               TRACE0("UpdateData failed during dialog termination\n");
               // The UpdateData routine will set focus to correct item
               return;
             }
           DestroyWindow();
   }
		
Expandir tudo | Reduzir tudo

Propriedades

Artigo: 103788 - Última revisão: 21 de novembro de 2006 - Revisão: 3.1
A informação contida neste artigo aplica-se a:
  • Microsoft Foundation Class Library 4.2 nas seguintes plataformas
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
Palavras-chave: 
kbmt kbdlg kbinfo kbuidesign KB103788 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 103788
Exclusão de Responsabilidade para Conteúdo sem Suporte na KB
Este artigo foi escrito sobre produtos para os quais a Microsoft já não fornece suporte. Por conseguinte, este artigo é oferecido "tal como está" e deixará de ser actualizado.

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com