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
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.
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.
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.
Dodaj #include <afxwinforms.h> do stdafx.h, na końcu istniejącej instrukcji #include.
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.).
Zamień CDialog w plikach CHostForWinForm.h i CHostForWinForm.cpp na CWinFormsDialog<WindowsControlLibrary1::UserControl1>.
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();
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.
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();
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; }
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"); }
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.
W sekcji publicznej klasy CHostForWinForm w obiekcie CHostForWinForm.h należy dodać następującą deklarację:
CString m_sEditBoxOnWinForm;
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);
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);
Skompiluj i uruchom projekt.
Zobacz też
Informacje
Inne zasoby
Używanie formantu użytkownika formularza systemu Windows w MFC