Partilhar via


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

MFC fornece a classe de modelo CWinFormsDialog para que o utilizador possa hospedar um controle de utilizador do Windows Forms (UserControl) numa caixa de diálogo MFC modal ou não modal. CWinFormsDialog é derivado da classe MFC CDialog, portanto a caixa de diálogo pode ser iniciada como modal ou não modal.

O processo que CWinFormsDialog usa para hospedar o controle de usuário é semelhante ao descrito em Hospedando um controle de usuário do Windows Form em uma caixa de diálogo MFC. No entanto, CWinFormsDialog gerencia a inicialização e hospedagem do controle de usuário para que ele não precise ser programado manualmente.

Para criar o aplicativo host MFC

  1. Crie um projeto de aplicativo MFC.

    No menu Arquivo , selecione Novo e clique em Projeto. Na pasta Visual C++ , selecione MFC Application.

    Na caixa Nome , insira MFC03 e altere a configuração Solução para Adicionar à Solução. Clique em OK.

    No Assistente de aplicativo MFC, aceite todos os padrões e, em seguida, clique em Concluir. Isso cria um aplicativo MFC com uma interface de vários documentos.

  2. Configure o projeto.

    No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto MFC03 e escolha Propriedades. A caixa de diálogo Páginas de propriedades é exibida.

    Na caixa de diálogo Páginas de Propriedades , selecione Propriedades>Gerais de Configuração. Na seção Padrões do Projeto, defina o suporte ao Common Language Runtime como Common Language Runtime Support (/clr). Escolha OK.

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

    No Gerenciador de Soluções, clique com o botão direito do mouse no nó do projeto MFC03 e escolha Adicionar, Referências. Na Página de Propriedades, clique em Adicionar Nova Referência, selecione WindowsControlLibrary1 (na guia Projetos) e clique em OK. Isso adiciona uma referência na forma de uma /FU opção de compilador para que o programa seja compilado, ele também copia WindowsControlLibrary1.dll para o diretório do MFC03 projeto para que o programa seja executado.

  4. Adicione #include <afxwinforms.h> a pch.h (stdafx.h no Visual Studio 2017 e anteriores), no final das instruções existentes #include .

  5. Adicione uma nova classe como subclasse de CDialog.

    Clique com o botão direito do rato no nome do projeto e adicione uma classe MFC (chamada CHostForWinForm) que subclasse CDialog. Como você não precisa do recurso da caixa de diálogo, você pode excluir a ID do recurso (selecione Modo de Exibição de Recurso, expanda a pasta Caixa de diálogo e exclua IDD_HOSTFORWINFORM o recurso. Em seguida, remova todas as referências ao ID no código.).

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

  7. Chame DoModal na classe CHostForWinForm.

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

    Antes da declaração de retorno na definição de CMFC03App::InitInstance, adicione:

    CHostForWinForm m_HostForWinForm;
    m_HostForWinForm.DoModal();
    
  8. Crie e execute o projeto.

    No menu Build, clique em Build Solution.

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

    Em seguida, você adicionará código para monitorar o estado de um controle no Windows Forms a partir do aplicativo MFC.

  9. Adicione um manipulador para OnInitDialog.

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

    virtual BOOL OnInitDialog();
    
  10. Defina OnInitDialog (in CHostForWinForm.cpp) da seguinte forma:

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

    No CHostForWinForm.cpp, adicione esta definição:

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

    Em seguida, você adicionará código para exibir a partir do código MFC o valor na caixa de texto no Windows Form.

  13. Na seção pública da CHostForWinForm classe em CHostForWinForm.h, adicione a seguinte declaração:

    CString m_sEditBoxOnWinForm;
    
  14. Na definição de DoDataExchange in CHostForWinForm.cpp, adicione as seguintes quatro 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. Na definição de OnButton1 in 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. Crie e execute o projeto.

Ver também

System.Windows.Forms.UserControl
Usando um controle de usuário do Windows Form no MFC