Compartilhar via


Hospedando um controle de usuário do Windows formulário como uma caixa de diálogo do MFC

O MFC fornece a classe CWinFormsDialog de modelo para permitir que você hospede um controle de usuário formulários do windows (UserControl) em uma caixa de diálogo modal ou sem-modo MFC.CWinFormsDialog é derivado da classe CDialogMFC, assim que a caixa de diálogo pode ser obtido como modal ou sem janela restrita.

O processo que CWinFormsDialog usa para hospedar o controle de usuário é similar ao descrito em Hospedando um controle de usuário do Windows formulário em uma caixa de diálogo do MFC.Em o entanto, CWinFormsDialog gerencia a inicialização e hospedar o controle de usuário para que não tem que ser programado manualmente.

Para um aplicativo de exemplo que os formulários do windows mostra usados com MFC, consulte MFC e integração de formulários do windows.

Para criar o aplicativo host MFC

  1. Crie um novo projeto de aplicativo MFC.

    Em o menu de Arquivo , Novoselecione, e clique em Projeto.Em a pasta de Visual C++ , Aplicativo MFCselecione.

    Em a caixa de Nome , entre em MFC03 e modificar a solução que define a Adicionar à Solução.Clique OK.

    Em Assistente para Aplicativo do MFC, aceite as opções, clique em Concluir.Isso cria um aplicativo MFC com uma interface de documentos múltiplos.

  2. Configurar o projeto.

    Em Gerenciador de Soluções, clique com o botão direito do mouse no nó de projeto de MFC03 , e selecione Propriedades do menu de contexto.a caixa de diálogo de Páginas de Propriedade aparece.

    Em a caixa de diálogo de Páginas de Propriedade , no controle da árvore de Propriedades de Configuração , selecione Geral, na seção de Padrões de Projeto , defina Suporte a common language runtime a Suporte a Common Language Runtime (/clr).Clique em OK.

  3. Adicione uma referência ao controle .NET.

    Em Gerenciador de Soluções, clique com o botão direito do mouse no nó de projeto de MFC03 e selecione Referências.Em Página de propriedades, clique Adicionar nova referência, WindowsControlLibrary1 selecione (na guia de Projetos ), e clique OK.Isso adiciona uma referência na forma de uma opção do compilador de /FU de modo que compila o programa; também copia WindowsControlLibrary1.dll no diretório do projeto de MFC03 de modo que o programa é executado.

  4. Adicione #include <afxwinforms.h> a stdafx.h, no fim das instruções existentes de #include .

  5. Adicione uma nova classe que subclasses CDialog.

    Clique com o botão direito do mouse no nome do projeto e adicionar uma classe MFC (CHostForWinForm chamado) que subclasses CDialog.Como você não precisar do recurso da caixa de diálogo, você pode excluir a identificação de recurso (selecionar o modo de recursos, expanda a pasta da caixa de diálogo e exclua o recurso de IDD_HOSTFORWINFORM.Em seguida, remova todas as referências para o ID no código.).

  6. Substitua CDialog em arquivos de CHostForWinForm.h e de CHostForWinForm.cpp com CWinFormsDialog<WindowsControlLibrary1::UserControl1>.

  7. Chame DoModal na classe de CHostForWinForm.

    Em MFC03.cpp, adicione #include "HostForWinForm.h".

    Antes da instrução return na definição de CMFC03App::InitInstance, adicione:

    CHostForWinForm m_HostForWinForm;

    m_HostForWinForm.DoModal();

  8. Criar e executar o projeto.

    No menu Build, clique em Build Solution.

    Em o menu de Depurar , clique em Iniciar sem depuração.

    Em seguida você adicionará código para monitorar o estado de um controle nos formulários do windows do aplicativo MFC.

  9. Adicionar um manipulador para OnInitDialog.

    Exibir a janela de Propriedades F4 ().Em Modo de Exibição de Classe, selecione CHostForWinForm.Em a janela de Propriedades, selecione substituições e na linha para OnInitDialog, clique na coluna esquerda e selecione < Adicionar >.Isso adiciona a seguinte linha para CHostForWinForm.h:

    virtual BOOL OnInitDialog();
    
  10. Defina OnInitDialog (em CHostForWinForm.cpp) como segue:

    BOOL CHostForWinForm::OnInitDialog() {
       CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog();
       GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1);
       return TRUE;
    }
    
  11. Em seguida adiciona o manipulador OnButton1.Adicione as seguintes linhas à seção da classe pública de CHostForWinForm em CHostForWinForm.h:

    virtual void OnButton1( System::Object^ sender, System::EventArgs^ e );
    
    BEGIN_DELEGATE_MAP( CHostForWinForm )
       EVENT_DELEGATE_ENTRY( OnButton1, System::Object^, System::EventArgs^ );
    END_DELEGATE_MAP()
    

    Em CHostForWinForm.cpp, adicionar essa definição:

    void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) 
    {
       System::Windows::Forms::MessageBox::Show("test");
    }
    
  12. Criar e executar o projeto.Quando você clica no botão, que está no windows forms, o código no aplicativo MFC será executado.

    Em seguida você adicionará código para a exibição de código MFC o valor na caixa de texto no formulário do windows.

  13. Em a seção da classe pública de CHostForWinForm em CHostForWinForm.h, adicione a declaração a seguir:

    CString m_sEditBoxOnWinForm;
    
  14. Em a definição de DoDataExchange em CHostForWinForm.cpp, adicione as seguintes três linhas ao final da função:

    if (pDX->m_bSaveAndValidate)
       m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text);
    else
       GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);
    
  15. Em a definição de OnButton1 em CHostForWinForm.cpp, adicione as seguintes três linhas ao final da função:

    this->UpdateData(TRUE);
    System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm);
    System::Windows::Forms::MessageBox::Show(z);
    
  16. Criar e executar o projeto.

Consulte também

Referência

System.Windows.Forms.UserControl

Outros recursos

Usando um controle de usuário do Windows formulário no MFC