Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
MFC tillhandahåller mallklassen CWinFormsDialog så att du kan använda en Windows Forms-användarkontroll (UserControl) i en modal eller icke-modal MFC-dialogruta.
CWinFormsDialog härleds från MFC-klassen CDialog, så dialogrutan kan startas antingen som modal eller icke-modalt.
Den process som CWinFormsDialog använder för att vara värd för användarkontrollen liknar den som beskrivs i Värd för en Användarkontroll för Windows-formulär i en MFC-dialogruta. Däremot hanterar CWinFormsDialog initiering av och värdskap för användarkontrollen så att den inte behöver programmeras manuellt.
Att skapa MFC-värdprogrammet
Skapa ett MFC-programprojekt.
På Arkiv-menyn väljer du Nytt och klickar sedan på Projekt. I mappen Visual C++ väljer du MFC-program.
I rutan Namn anger du
MFC03och ändrar inställningen för Lösning till Lägg till i lösning. Klicka på OK.I MFC-programguiden godkänner du alla standardvärden och klickar sedan på Slutför. Detta skapar ett MFC-program med ett gränssnitt för flera dokument.
Konfigurera projektet.
Högerklicka på MFC03-projektnoden i Solution Explorer och välj Egenskaper. Dialogrutan Egenskapssidor visas.
I dialogrutan Egenskapssidor väljer du Konfigurationsegenskaper>Allmänt. I avsnittet Project Defaults anger du Stöd för Common Language Runtime till Common Language Runtime Support (/clr). Välj OK.
Lägg till en referens till .NET-kontrollen.
Högerklicka på MFC03-projektnoden i Solution Explorer och välj Lägg tillreferenser. På egenskapssidan klickar du på Lägg till ny referens, väljer WindowsControlLibrary1 (under fliken Projekt) och klickar på OK. Detta lägger till en referens i form av ett
/FUkompilatoralternativ så att programmet kompileras. Det kopierasWindowsControlLibrary1.dllockså till projektkatalogenMFC03så att programmet körs.Lägg till
#include <afxwinforms.h>till pch.h (stdafx.h i Visual Studio 2017 och tidigare) i slutet av de befintliga#includesatserna.Lägg till en ny klass som subklassar
CDialog.Högerklicka på projektnamnet och lägg till en MFC-klass som heter
CHostForWinFormoch subklassarCDialog. Eftersom du inte behöver dialogruteresursen kan du ta bort resurs-ID:t (välj Resursvy, expandera dialogrutan och ta bortIDD_HOSTFORWINFORMresursen. Ta sedan bort alla referenser till ID:t i koden.).Ersätt
CDialogiCHostForWinForm.hochCHostForWinForm.cppfiler medCWinFormsDialog<WindowsControlLibrary1::UserControl1>.Anropa
DoModalpå klassenCHostForWinForm.I
MFC03.cpplägger du till#include "HostForWinForm.h".Innan retursatsen i definitionen av
CMFC03App::InitInstancelägger du till:CHostForWinForm m_HostForWinForm; m_HostForWinForm.DoModal();Skapa och kör projektet.
Klicka på Skapa lösning på Skapa-menyn.
På felsökningsmenyn klickar du på Starta utan att felsöka.
Därefter lägger du till kod för att övervaka tillståndet för en kontroll i Windows Forms från MFC-programmet.
Lägg till en hanterare för
OnInitDialog.Visa fönstret Egenskaper (F4). I Klassvy väljer du
CHostForWinForm. I fönstret Egenskaper väljer du åsidosättningar och i raden förOnInitDialogklickar du i den vänstra kolumnen och väljer < Lägg till >. Detta lägger till följande rad iCHostForWinForm.h:virtual BOOL OnInitDialog();Definiera
OnInitDialog(iCHostForWinForm.cpp) enligt följande:BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE; }Lägg sedan till
OnButton1hanteraren. Lägg till följande rader i det offentliga avsnittet iCHostForWinFormklassen iCHostForWinForm.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()I
CHostForWinForm.cpplägger du till den här definitionen:void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) { System::Windows::Forms::MessageBox::Show("test"); }Skapa och kör projektet. När du klickar på knappen, som finns i Windows-formuläret, körs koden i MFC-programmet.
Därefter kommer du att lägga till kod i MFC-koden för att visa värdet i textrutan på Windows-formuläret.
Lägg till följande deklaration i det offentliga avsnittet i
CHostForWinFormklassen iCHostForWinForm.h:CString m_sEditBoxOnWinForm;I definitionen av
DoDataExchangeiCHostForWinForm.cpplägger du till följande fyra rader i slutet av funktionen:if (pDX->m_bSaveAndValidate) m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text); else GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);I definitionen av
OnButton1iCHostForWinForm.cpplägger du till följande tre rader i slutet av funktionen:this->UpdateData(TRUE); System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm); System::Windows::Forms::MessageBox::Show(z);Skapa och kör projektet.
Se även
System.Windows.Forms.UserControl
Använda en Användarkontroll för Windows-formulär i MFC