Hostitelské poskytování uživatelského ovládacího prvku modelu Windows Form jako dialogového okna knihovny MFC
Knihovna MFC poskytuje šablony třídy CWinFormsDialog tak, aby bylo možné hostovat uživatelské ovládací prvky formuláře Windows (UserControl) v modálním nebo nemodálním dialogovém okně knihovny MFC.CWinFormsDialog je odvozen od třídy knihovny MFC CDialog, tak aby bylo možné dialogové okno spustit jak modálně tak nemodálně.
Proces, který používá CWinFormsDialog k hostování uživatelského ovládacího prvku, je podobný tomu popsanému v Hostitelské poskytování uživatelského rozhraní Windows Form v dialogovém okně knihovny MFC.CWinFormsDialog však spravuje inicializace a poskytování hostitelských služeb uživatelského ovládacího prvku tak, aby toto nebylo nutné naprogramovat ručně.
Pro ukázku aplikace, která zobrazuje použití modelu Windows Forms s knihovnou MFC se podívejte na odkaz Knihovna MFC a integrace Windows Forms.
Chcete-li vytvořit hostitelskou aplikaci knihovny MFC
Vytvořte projekt aplikace knihovny MFC.
V nabídce Soubor vyberte Nový a potom klikněte na Projekt.Ve složce Visual C++ vyberte Aplikace MFC.
V poli Název zadejte MFC03 a změňte nastavení Řešení na možnost Přidat k řešení.Klikněte na tlačítko OK.
V Průvodci MFC aplikace přijměte všechny výchozí hodnoty a klikněte na tlačítko Dokončit.Tím se vytvoří aplikace knihovny MFC s rozhraním více dokumentů (MDI).
Konfigurujte projekt.
V Průzkumníku řešení klikněte pravým tlačítkem na uzel projektu MFC03 a vyberte možnost Vlastnosti.Zobrazí se dialogové okno Stránky vlastností.
V dialogovém okně Vlastnost stránky ve stromovém zobrazení Vlastnosti konfigurace vyberte Obecná, pak v sekci Výchozí projekt nastavte Podpora modulu CLR (CLR) na Podpora modulu CLR (clr).Klikněte na tlačítko OK.
Přidejte odkaz na ovládací prvek .NET.
V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu MFC03 a vyberte možnosti Přidat, Odkazy.Na Stránce vlastností klikněte na Přidat nový odkaz, vyberte WindowsControlLibrary1 (na kartě Projekty) a klikněte na tlačítko OK.To přidá odkaz ve formuláři možnosti kompilátoru /FU, takže program bude kompilován; také zkopíruje WindowsControlLibrary1.dll do adresáře projektu MFC03, takže se program spustí.
Přidejte #include <afxwinforms.h> do stdafx.h na konci existujícího příkazu #include.
Přidejte novou třídu dané CDialog podtřídy.
Klikněte pravým tlačítkem myši na název projektu a přidejte třídu knihovny MFC (nazývanou CHostForWinForm), která je podtřídou CDialog.Vzhledem k tomu, že nepotřebujete prostředky dialogového okna, můžete odstranit ID prostředku (vyberte zobrazení prostředků, rozbalte složku dialogu a odstraňte prostředek IDD_HOSTFORWINFORM. Potom odeberte všechny odkazy na ID v kódu.).
Nahraďte CDialog v CHostForWinForm.h a CHostForWinForm.cpp za CWinFormsDialog<WindowsControlLibrary1::UserControl1>.
Volejte DoModal na třídě CHostForWinForm.
V MFC03.cpp přidejte #include "HostForWinForm.h".
Před příkaz return v definici CMFC03App::InitInstance přidejte:
CHostForWinForm m_HostForWinForm;
m_HostForWinForm.DoModal();
Sestavte a spusťte projekt.
V nabídce Sestavení klikněte na příkaz Sestavit řešení.
V nabídce Ladit klikněte na Spustit bez ladění.
Dále přidáte kód ke sledování stavu ovládacího prvku ve formuláři modelu Windows Forms z aplikace knihovny MFC.
Přidejte obslužnou rutinu pro OnInitDialog.
Zobrazte okno Vlastnosti (F4).V Zobrazení tříd vyberte CHostForWinForm.V okně Vlastnosti, vyberte přetížení a v řádku pro OnInitDialog klikněte na tlačítko v levém sloupci a vyberte možnost < Přidat >.Toto přidá následující řádek do CHostForWinForm.h:
virtual BOOL OnInitDialog();
Definujte OnInitDialog (v CHostForWinForm.cpp) takto:
BOOL CHostForWinForm::OnInitDialog() { CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog(); GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1); return TRUE; }
Dále přidejte obslužnou rutinu OnButton1.Přidejte následující řádky do veřejné sekce třídy CHostForWinForm v 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()
V CHostForWinForm.cpp přidejte tuto definici:
void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) { System::Windows::Forms::MessageBox::Show("test"); }
Sestavte a spusťte projekt.Když kliknete na tlačítko, které je na formuláři modelu Windows Forms, bude spuštěn kód v aplikaci knihovny MFC.
Dále přidejte kód k zobrazení hodnoty z kódu knihovny MFC v textovém poli na formuláři modelu Windows Forms.
Do veřejné sekce třídy CHostForWinForm v CHostForWinForm.h přidejte následující deklarace:
CString m_sEditBoxOnWinForm;
V definici DoDataExchange v CHostForWinForm.cpp přidejte následující tři řádky na konec funkce:
if (pDX->m_bSaveAndValidate) m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text); else GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);
V definici OnButton1 v CHostForWinForm.cpp přidejte následující tři řádky na konec funkce:
this->UpdateData(TRUE); System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm); System::Windows::Forms::MessageBox::Show(z);
Sestavte a spusťte projekt.
Viz také
Referenční dokumentace
Další zdroje
Použití uživatelského ovládacího prvku Windows Form v prostředí MFC