INFO: Criando uma caixa de diálogo sem janela restrita com bibliotecas de MFC

Traduções deste artigo Traduções deste artigo
ID do artigo: 103788 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo demonstra como criar uma caixa de diálogo sem janela restrita usando um recurso de modelo de caixa de diálogo usando o MFC.

Para criar uma caixa de diálogo CModeless, devem ser seguidas as etapas a seguir:

  1. Crie uma classe de diálogo derivada de CDialog e substituir a função de membro Create() de CDialog. Por exemplo, você pode ter código semelhante à seguinte:
          class CModeless: public CDialog
               {
                 .
                 .
                 .
                 public:
                     CModeless(){ }
                     BOOL Create(UINT nID, CWnd * pWnd)
                          { return CDialog::Create(nID,pWnd);}
                 .
                 .
                 .
               };
    				
    Observação: você pode permitir que ClassWizard gerar a classe de diálogo e adicione a função Create() simplesmente.
  2. Escreva código para construir um objeto da classe diálogo e criar a janela da caixa de diálogo. Por exemplo, se você tiver um item de menu que deve exibir a caixa de diálogo, você pode ter código semelhante à seguinte:
          void CMainFrame::OnModeless()
            {
                pdlg = new CModeless;
                pdlg->Create(IDD_DIALOG1,this);
            }
    				
    onde CMainFrame::pdlg é definido como:
    CModeless * pdlg;
    Observação: É importante alocar o objeto no heap em vez da pilha se você desejar impedir que a caixa de diálogo sem janela restrita sendo destruído quando a função é finalizada.
  3. Você deve chamar CWnd::DestroyWindow() em OnCancel ou sempre que a caixa de diálogo sem janela restrita precisa ser destruído.
          void CModeless::OnCancel()
          {
              DestroyWindow();
          }
    				
  4. Substituir CWnd::PostNcDestroy() na sua classe de diálogo para excluir o objeto 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 sem janela restrita normalmente substituirão o OnOK() e OnCancel() membro 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() chamam EndDialog(). EndDialog() deve ser chamado somente quando usando caixas de diálogo modal.

Se você estiver usando DDX (caixa de diálogo Data Exchange) e validação de dados de caixa de diálogo (DDV), você estará OnOK() manipulador para sua classe de diálogo pode ser semelhante a 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 | Recolher tudo

Propriedades

ID do artigo: 103788 - Última revisão: terça-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 103788
Aviso de Isenção de Responsabilidade sobre Conteúdo do KB Aposentado
Este artigo trata de produtos para os quais a Microsoft não mais oferece suporte. Por esta razão, este artigo é oferecido "como está" e não será mais atualizado.

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