Sdílet prostřednictvím


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

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

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

  3. 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í.

  4. Přidejte #include <afxwinforms.h> do stdafx.h na konci existujícího příkazu #include.

  5. 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.).

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

  7. 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();

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

  9. 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();
    
  10. Definujte OnInitDialog (v CHostForWinForm.cpp) takto:

    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.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");
    }
    
  12. 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.

  13. Do veřejné sekce třídy CHostForWinForm v CHostForWinForm.h přidejte následující deklarace:

    CString m_sEditBoxOnWinForm;
    
  14. 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);
    
  15. 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);
    
  16. Sestavte a spusťte projekt.

Viz také

Referenční dokumentace

UserControl

Další zdroje

Použití uživatelského ovládacího prvku Windows Form v prostředí MFC