Udostępnij za pośrednictwem


Hostowanie formantu użytkownika formularza systemu Windows jako okna dialogowego MFC

Biblioteka MFC zawiera klasę szablonów CWinFormsDialog, tak że można obsługiwać formant użytkownika interfejsu Windows Forms (UserControl) w modalnym lub niemodalnym oknie dialogowym biblioteki MFC.CWinFormsDialog wywodzi się z klasy MFC CDialog, więc to okno dialogowe można uruchomić jako modalne lub niemodalne.

Proces, którego CWinFormsDialog używa do hostowania formantu użytkownika jest podobny do tego opisanego w Hostowanie formantu użytkownika formularza systemu Windows w oknie dialogowym MFC.Jednakże klasa CWinFormsDialog zarządza inicjowaniem i hostingiem kontroli użytkownika, tak aby nie musiała być programowana ręcznie.

Aby uzyskać przykładową aplikację, który pokazuje formularze Windows Forms używane z biblioteką MFC, zobacz Integracja biblioteki MFC i formularzy Windows Forms.

Aby utworzyć aplikację hosta MFC

  1. Utwórz projekt aplikacji MFC.

    W menu Plik zaznacz Nowy, a następnie kliknij Projekt.W folderze Visual C++ wybierz pozycję Aplikacja MFC.

    W polu Nazwa wprowadź MFC03 i zmień ustawienie Rozwiązanie na Dodaj do rozwiązania.Kliknij przycisk OK.

    W Kreatorze aplikacji MFC zaakceptuj wszystkie ustawienia domyślne, a następnie kliknij przycisk Zakończ.Tworzy to aplikację MFC z interfejsem wielu dokumentów.

  2. Skonfiguruj projekt.

    W oknie Eksplorator rozwiązań kliknij prawym przyciskiem myszy węzeł projektu MFC03, a następnie kliknij polecenie Właściwości.Wyświetli się okno dialogowe Strony właściwości.

    W oknie dialogowym Strony właściwości w drzewie Właściwości konfiguracji wybierz opcję Ogólne, a następnie w sekcji Domyślne wartości projektu sekcji ustaw opcję Obsługa środowiska uruchomieniowego języka wspólnego na Wsparcie CLR (/clr).Kliknij przycisk OK.

  3. Dodaj odwołanie do formantu .NET.

    W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy węzeł projektu MFC03 i wybierz kolejno polecenia Dodaj > Odwołania.W oknie dialogowym Stronie właściwości kliknij przycisk Dodaj nowe odwołanie, zaznacz pozycję WindowsControlLibrary1 (na karcie Projekty) i kliknij przycisk OK.Dodaje to odwołanie w formie opcji kompilatora /FU, tak aby program został skompilowany; kopiuje również WindowsControlLibrary1.dll do katalogu projektu MFC03, aby program mógł zostać uruchomiony.

  4. Dodaj #include <afxwinforms.h> do stdafx.h, na końcu istniejącej instrukcji #include.

  5. Dodaj nową klasę tej podklasy CDialog.

    Kliknij prawym przyciskiem myszy nazwę projektu i dodaj klasę MFC (o nazwie CHostForWinForm) podzieloną na podklasy CDialog.Ponieważ nie ma potrzeby zapewniania zasobu pola dialogowego, można usunąć identyfikator zasobu (zaznacz widok zasobu, rozwiń folder Dialog i usuń zasób IDD_HOSTFORWINFORM. Następnie usuń wszelkie odwołania do Identyfikatora w kodzie.).

  6. Zamień CDialog w plikach CHostForWinForm.h i CHostForWinForm.cpp na CWinFormsDialog<WindowsControlLibrary1::UserControl1>.

  7. Wywołanie DoModal klasy CHostForWinForm.

    W pliku MFC03.cpp dodaj element #include "HostForWinForm.h".

    Przed instrukcją powrotu w definicji CMFC03App::InitInstance należy dodać:

    CHostForWinForm m_HostForWinForm;

    m_HostForWinForm.DoModal();

  8. Skompiluj i uruchom projekt.

    W menu Kompilacja kliknij Kompiluj rozwiązanie.

    Na pasku menu kliknij Debugowanie, Rozpocznij bez debugowania.

    Następną czynnością będzie dodanie kodu do monitorowania stanu formantu w interfejsie Windows Forms z aplikacji MFC.

  9. Dodaj program obsługi dla OnInitDialog.

    Wyświetla okno Właściwości (F4).W oknie Widoku klas wybierz pozycję CHostForWinForm.W oknie Właściwości zaznacz zastąpienia i w wierszu zdarzenia OnInitDialog kliknij w lewej kolumnie i zaznacz opcję < Dodaj >.Dodaje to następujący wiersz do CHostForWinForm.h:

    virtual BOOL OnInitDialog();
    
  10. Zdefiniuj OnInitDialog (w CHostForWinForm.cpp) w następujący sposób:

    BOOL CHostForWinForm::OnInitDialog() {
       CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog();
       GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1);
       return TRUE;
    }
    
  11. Następnie dodaj program obsługi OnButton1.Dodaj następujące wiersze do sekcji publicznej klasy CHostForWinForm w obiekcie 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()
    

    W pliku CHostForWinForm.cpp dodaj tę definicję:

    void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e ) 
    {
       System::Windows::Forms::MessageBox::Show("test");
    }
    
  12. Skompiluj i uruchom projekt.Po kliknięciu przycisku, który znajduje się w formularzu Windows, uruchomi się kod w aplikacji MFC.

    Następnie należy dodać kod, aby wyświetlić z kodu MFC wartość w polu tekstowym w formularzu systemu Windows.

  13. W sekcji publicznej klasy CHostForWinForm w obiekcie CHostForWinForm.h należy dodać następującą deklarację:

    CString m_sEditBoxOnWinForm;
    
  14. W definicji elementu DoDataExchange w pliku CHostForWinForm.cpp należy dodać następujące trzy wiersze na końcu funkcji:

    if (pDX->m_bSaveAndValidate)
       m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text);
    else
       GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);
    
  15. W definicji elementu OnButton1 w pliku CHostForWinForm.cpp należy dodać następujące trzy wiersze na końcu funkcji:

    this->UpdateData(TRUE);
    System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm);
    System::Windows::Forms::MessageBox::Show(z);
    
  16. Skompiluj i uruchom projekt.

Zobacz też

Informacje

UserControl

Inne zasoby

Używanie formantu użytkownika formularza systemu Windows w MFC