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

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
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
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();   }		
Sumário
kbinf 1.00 1.50 2,00 2.10 2,50 2.51 2.52 3.00 3.10 4.00

Propriedades

ID do Artigo: 103788 - Última Revisão: 12/04/2015 09:42:22 - Revisão: 3.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbdlg kbinfo kbuidesign KB103788 KbMtpt
Comentários