Share via


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

  1. 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ů.

  2. 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.

  3. 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; také zkopíruje WindowsControlLibrary1.dll do MFC03 adresáře projektu tak, aby program běžel.

  4. 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ší).

  5. 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ňte IDD_HOSTFORWINFORM prostředek. Potom odeberte všechny odkazy na ID v kódu.)

  6. Nahraďte CDialog v souborech CHostForWinForm.h a CHostForWinForm.cpp soubory .CWinFormsDialog<WindowsControlLibrary1::UserControl1>

  7. Volání DoModal v CHostForWinForm třídy.

    V prostředí MFC03.cpp přidejte #include "HostForWinForm.h".

    Před příkaz return v definici CMFC03App::InitInstance přidejte:

    CHostForWinForm m_HostForWinForm;
    m_HostForWinForm.DoModal();
    
  8. 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.

  9. 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();
    
  10. 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;
    }
    
  11. 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");
    }
    
  12. 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.

  13. Ve veřejné části CHostForWinForm třídy v CHostForWinForm.h přidejte následující deklaraci:

    CString m_sEditBoxOnWinForm;
    
  14. 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);
    
  15. 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);
    
  16. 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