Hostování uživatelského ovládacího prvku modelu Windows Form jako dialogové okno knihovny MFC
Knihovna MFC poskytuje šablony třídy CWinFormsDialog tak, aby bylo možné hostovat uživatelské ovládací prvky model Windows Forms (UserControl) v modálním nebo nemodálním dialogovém okně knihovny MFC. CWinFormsDialog je odvozena od třídy knihovna 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ém v Hostování uživatelského rozhraní modelu Windows Form v dialogovém okně knihovny MFC. Však CWinFormsDialog spravuje inicializace a poskytování hostitelských služeb uživatelského ovládacího prvku tak, aby toto nebylo nutné naprogramovat ručně.
Ukázková aplikace zobrazuje model Windows Forms s MFC naleznete MFC a integrace WinForms.
Chcete-li vytvořit hostitelskou aplikaci knihovny MFC
Vytvořte nový projekt aplikace knihovny MFC.
V nabídce Soubor vyberte Nový a potom klikněte na Projekt. Ve složce Visual C++ vyberte Aplikace knihovny MFC.
V poli Název zadejte MFC03 a změňte nastavení Řešení na Přidat k řešení. Klepněte na tlačítko OK.
V Průvodci aplikace knihovny MFC 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).
Chcete-li konfigurovat projekt
V Průzkumníku řešení klikněte pravým tlačítkem myši na uzel projektu MFC03 a vyberte Vlastnosti z kontextové nabídky. 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). Klepně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 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 Build (Sestavit) klepněte na příkaz Build Solution (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 prveku na 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 < 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 definice:
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é 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é
Odkaz
System.Windows.Forms.UserControl
Další zdroje
Použití uživatelského ovládacího prvku formuláře Windows v MFC