Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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
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.
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.
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 copiaWindowsControlLibrary1.dll
para o diretório doMFC03
projeto para que o programa seja executado.Adicione
#include <afxwinforms.h>
a pch.h (stdafx.h no Visual Studio 2017 e anteriores), no final das instruções existentes#include
.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 subclasseCDialog
. 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 excluaIDD_HOSTFORWINFORM
o recurso. Em seguida, remova todas as referências ao ID no código.).Substitua
CDialog
emCHostForWinForm.h
eCHostForWinForm.cpp
arquivos porCWinFormsDialog<WindowsControlLibrary1::UserControl1>
.Chame
DoModal
na classeCHostForWinForm
.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();
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.
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 deOnInitDialog
, clique na coluna da esquerda e selecione < Adicionar >. Isso adiciona a seguinte linha aCHostForWinForm.h
:virtual BOOL OnInitDialog();
Defina
OnInitDialog
(inCHostForWinForm.cpp
) da seguinte forma:BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE; }
Em seguida, adicione o
OnButton1
manipulador. Adicione as seguintes linhas à seção pública daCHostForWinForm
classe emCHostForWinForm.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"); }
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.
Na seção pública da
CHostForWinForm
classe emCHostForWinForm.h
, adicione a seguinte declaração:CString m_sEditBoxOnWinForm;
Na definição de
DoDataExchange
inCHostForWinForm.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);
Na definição de
OnButton1
inCHostForWinForm.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);
Crie e execute o projeto.
Ver também
System.Windows.Forms.UserControl
Usando um controle de usuário do Windows Form no MFC