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
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.
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.
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.
Adicione #include <afxwinforms.h> a stdafx.h, no fim das instruções existentes de #include .
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.).
Substitua CDialog em arquivos de CHostForWinForm.h e de CHostForWinForm.cpp com CWinFormsDialog<WindowsControlLibrary1::UserControl1>.
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();
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.
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();
Defina OnInitDialog (em CHostForWinForm.cpp) como segue:
BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE; }
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"); }
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.
Em a seção da classe pública de CHostForWinForm em CHostForWinForm.h, adicione a declaração a seguir:
CString m_sEditBoxOnWinForm;
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);
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);
Criar e executar o projeto.
Consulte também
Referência
System.Windows.Forms.UserControl