Que hospeda um controle de usuário do Windows Form, como uma caixa de diálogo do MFC
MFC fornece a classe de modelo CWinFormsDialog para permitir que você hospedar um controle de usuário do Windows Forms (UserControl) em uma janela restrita ou sem janela restrita MFC caixa de diálogo. CWinFormsDialogé derivada da classe MFC CDialog, portanto, a caixa de diálogo pode ser iniciada como modal ou sem janela restrita.
O processo que CWinFormsDialog usa para hospedar o controle de usuário é semelhante ao descrito em Hospedando um controle de usuário de Windows Form em uma caixa de diálogo do MFC. No entanto, CWinFormsDialog gerencia a inicialização e a hospedagem do controle de usuário para que ele não tem que ser programado manualmente.
Para um aplicativo de exemplo que mostra usado com MFC do Windows Forms, consulte MFC e integração do WinForms.
Para criar o aplicativo host do MFC
Crie um novo projeto de aplicativo MFC.
Sobre o arquivo menu, selecione novae, em seguida, clique em projeto. No Visual C++ pasta, selecione Aplicativo MFC.
No nome , digite MFC03 e altere a configuração de solução para Adicionar a solução.Click OK.
No mfc Application Wizard, aceite todos os padrões e clique em Concluir. Isso cria um aplicativo MFC com uma Interface de documentos múltiplos.
Configure o projeto.
Em Solution Explorer, com o botão direito do MFC03 nó do projeto e selecione Propriedades no menu de contexto. O Property Pages caixa de diálogo aparece.
No Property Pages na caixa a Propriedades de configuração controle de árvore, selecione Geral, na Padrões de projeto seção, defina suporte a Common Language Runtime para suporte de Runtime de linguagem comum (/ clr). Click OK.
Adicionar uma referência para o.Controle de rede.
Em Solution Explorer, com o botão direito do MFC03 select e o nó do projeto referências. No Página de propriedades, clique em Adicionar nova referência de, selecione WindowsControlLibrary1 (sob o projetos guia) e clique em OK. Isso adiciona uma referência na forma de um /FU opção de compilador para que o programa será compilado; Ele também copia WindowsControlLibrary1.dll na MFC03 diretório de projeto para que o programa será executado.
Adicionar #include <afxwinforms.h> para stdafx. h, no final da existente #include instruções.
Adicionar uma nova classe que pode efetuar subclasses CDialog.
Clique com o botão direito no nome do projeto e adicionar uma classe do MFC (chamado CHostForWinForm) que pode efetuar subclasses CDialog. Desde que você não precisa do recurso da caixa de diálogo, você pode excluir a identificação do recurso (selecione o modo de exibição de recursos, expanda a pasta de caixa de diálogo e excluir o recurso IDD_HOSTFORWINFORM. Em seguida, remova quaisquer referências à identificação no código.).
Substitua CDialog em arquivos de CHostForWinForm.h e CHostForWinForm.cpp com CWinFormsDialog<WindowsControlLibrary1::UserControl1>.
Chame DoModal na classe CHostForWinForm.
Adicionar MFC03.cpp, #include "HostForWinForm.h".
Antes da instrução return na definição de CMFC03App::InitInstance, adicione:
CHostForWinForm m_HostForWinForm;
m_HostForWinForm.DoModal();
Build and run the project.
Sobre o Build menu, clique em Build Solution.
Sobre o Debug menu, clique em Start without debugging.
Em seguida, você adicionará código para monitorar o estado de um controle nos formulários do Windows do aplicativo MFC.
Adicione um manipulador para OnInitDialog.
Exibição de Propriedades janela (F4). Em o modo de exibição de classe, selecione CHostForWinForm. No Propriedades janela, selecione substituições e na linha OnInitDialog, clique na coluna à esquerda e selecione < Adicionar >. Isso adiciona a seguinte linha CHostForWinForm.h:
virtual BOOL OnInitDialog();
Defina OnInitDialog (em CHostForWinForm.cpp) da seguinte maneira:
BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE; }
Em seguida, adicione o manipulador de OnButton1. Adicione as seguintes linhas para a seção pública da classe CHostForWinForm no 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 essa definição:
void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) { System::Windows::Forms::MessageBox::Show("test"); }
Build and run the project. Quando você clicar no botão, o que é no Windows Form, o código no aplicativo MFC será executado.
Em seguida, você adicionará código para exibir o valor do código MFC na caixa de texto no Windows Form.
Na seção pública da classe CHostForWinForm na CHostForWinForm.h, adicione a seguinte declaração:
CString m_sEditBoxOnWinForm;
Na definição de DoDataExchange em CHostForWinForm.cpp, adicione as seguintes três linhas para o 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 em CHostForWinForm.cpp, adicione as seguintes três linhas para o final da função:
this->UpdateData(TRUE); System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm); System::Windows::Forms::MessageBox::Show(z);
Build and run the project.
Consulte também
Referência
System.Windows.Forms.UserControl