Hostitelské poskytování uživatelského ovládacího prvku modelu Windows Form jako dialogového okna knihovny MFC
MFC poskytuje třídu šablonY CWinFormsDialog, abyste mohli hostovat model Windows Forms uživatelský ovládací prvek (UserControl) v modálním nebo bezmodálním dialogovém okně MFC. CWinFormsDialog
je odvozena z mfc třídy CDialog, takže dialogové okno lze spustit jako modální nebo bezmodální.
Proces, který CWinFormsDialog
používá k hostování uživatelského ovládacího prvku, je podobný procesu popsanému v hostování uživatelského ovládacího prvku Windows Form v dialogovém okně MFC. Spravuje však inicializaci a hostování uživatelského ovládacího prvku tak, CWinFormsDialog
aby se nemusel programovat ručně.
Vytvoření hostitelské aplikace MFC
Vytvořte projekt aplikace MFC.
V nabídce Soubor vyberte Nový a potom klepněte na tlačítko Projekt. Ve složce Visual C++ vyberte aplikaci MFC.
Do pole Název zadejte a změňte
MFC03
nastavení Řešení na Přidat do řešení. Klikněte na OK.V Průvodci aplikací MFC přijměte všechny výchozí hodnoty a klepněte na tlačítko Dokončit. Tím se vytvoří aplikace MFC s více rozhraním dokumentů.
Nakonfigurujte projekt.
V Průzkumník řešení klikněte pravým tlačítkem myši na uzel projektu MFC03 a zvolte Vlastnosti. Zobrazí se dialogové okno Stránky vlastností.
V dialogovém okně Stránky vlastností vyberte Obecné vlastnosti>konfigurace. V části Výchozí nastavení projektu nastavte podporu modulu Clr (Common Language Runtime) na Podporu modulu Clr (/clr). Vyberte OK.
Přidejte odkaz na ovládací prvek .NET.
V Průzkumník řešení klikněte pravým tlačítkem myši na uzel projektu MFC03 a zvolte Přidat odkazy. Na stránce vlastností klepněte na tlačítko Přidat nový odkaz, vyberte WindowsControlLibrary1 (pod kartou Projekty) a klepněte na tlačítko OK. Tím se přidá odkaz ve formě možnosti kompilátoru /FU , aby program zkompiloval; zkopíruje také WindowsControlLibrary1.dll do
MFC03
adresáře projektu, aby program běžel.Na konec existujících
#include
příkazů přidejte#include <afxwinforms.h>
do souboru pch.h (stdafx.h v sadě Visual Studio 2017 a starší).Přidejte novou třídu, která podtřídy
CDialog
.Klikněte pravým tlačítkem myši na název projektu a přidejte třídu MFC (s názvem CHostForWinForm), která podtřídy
CDialog
. Vzhledem k tomu, že prostředek dialogového okna nepotřebujete, můžete id prostředku odstranit (vyberte Zobrazení zdrojů, rozbalte složku Dialogové okno a odstraňteIDD_HOSTFORWINFORM
prostředek. Potom odeberte všechny odkazy na ID v kódu.)Nahraďte
CDialog
soubory cHostForWinForm.h a CHostForWinForm.cpp soubory .CWinFormsDialog<WindowsControlLibrary1::UserControl1>
Volání DoModal v CHostForWinForm třídy.
Do 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 Sestavit řešení.
V nabídce Ladění klepněte na tlačítko Start bez ladění.
Dále přidáte kód pro monitorování stavu ovládacího prvku na model Windows Forms z aplikace MFC.
Přidejte obslužnou rutinu pro OnInitDialog.
Zobrazení okna Vlastnosti (F4). V zobrazení třídy vyberte CHostForWinForm. V okně Vlastnosti vyberte přepsání a v řádku pro OnInitDialog klikněte do levého sloupce a vyberte < Přidat >. Tím se do souboru CHostForWinForm.h přidá následující řádek:
virtual BOOL OnInitDialog();
Definujte OnInitDialog (v CHostForWinForm.cpp) následujícím způsobem:
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. Do veřejné části třídy CHostForWinForm v CHostForWinForm.h přidejte následující řádky:
virtual void OnButton1( System::Object^ sender, System::EventArgs^ e ); BEGIN_DELEGATE_MAP( CHostForWinForm ) EVENT_DELEGATE_ENTRY( OnButton1, System::Object^, System::EventArgs^ ); END_DELEGATE_MAP()
Do 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 ve Formuláři Windows, spustí se kód v aplikaci MFC.
Dále přidáte kód, který se zobrazí z kódu MFC, hodnotu v textovém poli ve formuláři Windows.
Ve veřejné části CHostForWinForm třídy v CHostForWinForm.h přidejte následující deklaraci:
CString m_sEditBoxOnWinForm;
V definici DoDataExchange v CHostForWinForm.cpp přidejte na konec funkce následující tři řádky:
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 na konec funkce následující tři řádky:
this->UpdateData(TRUE); System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm); System::Windows::Forms::MessageBox::Show(z);
Sestavte a spusťte projekt.
Viz také
System.Windows.Forms.UserControlPoužití uživatelského ovládacího prvku Windows Form v prostředí MFC