Sdílet prostřednictvím


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

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

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

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

  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 < 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 definice:

    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é 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é

Odkaz

System.Windows.Forms.UserControl

Další zdroje

Použití uživatelského ovládacího prvku formuláře Windows v MFC