Freigeben über


MTMDI-Beispiel: Demonstriert einen Benutzeroberflächen-Thread für MFC

Aktualisiert: November 2007

Das MTMDI-Beispiel erläutert einen MFC-Benutzeroberflächenthread, bei dem Benutzeroberflächenereignisse in einem vom Hauptanwendungsthread separaten Thread verarbeitet werden. Dieses Beispiel ist eine modifizierte Version des Singlethread-MDI-Beispiels.

MTMDI erfordert nicht unbedingt, dass das Fenster mit der springenden Kugel in einen separaten Thread gelegt wird. Die Benutzer könnten den Unterschied zwischen dem MDI- und dem MTMDI-Beispiel auf einem Computer mit nur einem Prozessor nicht feststellen. Selbst auf einem Multiprozessorcomputer könnte der Unterschied nicht festgestellt werden, vorausgesetzt, die Kugelbewegung basiert auf einem Fensterzeitgeber.

Dennoch erläutert MTMDI Verfahren für die Implementierung eines MFC-Benutzeroberflächenthreads. Durch Vergleichen der Quellen für das MDI- und das MTMDI-Beispiel können Sie sehen, welcher Programmieraufwand bei Verwendung der MFC-Benutzeroberflächenthreads erforderlich ist.

Der Programmieraufwand in MTMDI soll verdeutlichen, dass Benutzeroberflächenthreads aufgrund der damit verbundenen hohen Kosten nur verwendet werden sollten, wenn dies unbedingt erforderlich ist. Der wesentlich allgemeinere Threadtyp in MFC ist der im MTRECALC-Beispiel veranschaulichte Arbeitsthread.

Sicherheitshinweis:

Dieser Beispielcode dient dazu, ein Konzept zu veranschaulichen. Er sollte nicht für Anwendungen oder Websites verwendet werden, da dieser Code unter Umständen nicht die sicherste Codierungstechnik darstellt. Microsoft übernimmt keine Haftung für beiläufig entstandene Schäden oder Folgeschäden, falls der Beispielcode nicht bestimmungsgemäß verwendet wird.

So rufen Sie Beispiele und Anweisungen für ihre Installation ab

  • Klicken Sie in Visual Studio im Menü Hilfe auf Beispiele.

    Weitere Informationen finden Sie unter Suchen von Beispieldateien.

  • Die neueste Version und vollständige Liste mit Beispielen ist online unter Visual Studio 2008 Samples verfügbar.

  • Sie können auch Beispiele auf der Festplatte des Computers suchen. Standardmäßig werden Beispiele und eine Infodatei in einen Ordner unter \Programme\Visual Studio 9.0\Samples\ kopiert. Für Express Editions von Visual Studio sind alle Beispiele online verfügbar.

Erstellen und Ausführen des Beispiels

So erstellen Sie das MTMDI-Beispiel und führen es aus

  1. Öffnen Sie die Projektmappe MtMdi.sln.

  2. Klicken Sie im Menü Erstellen auf Erstellen.

  3. Klicken Sie im Menü Debuggen auf Starten ohne Debuggen.

Über das Menü Datei können Sie neue Fenster zweier unterschiedlicher Typen erstellen. Nachdem die Fenster erstellt wurden, können Sie die Attribute der Elemente in dem Fenster mithilfe der Befehle in den Menüs Farbe, Geschwindigkeit, Fenster und Hilfe ändern. Beachten Sie, dass das Menü Geschwindigkeit im Fenster "Hello!" nicht vorhanden ist.

MTMDI verwendet seine eigene von CWinThread abgeleitete Klasse mit dem Namen CBounceThread, die in die Datei Mtbounce.cpp implementiert wird. Der Thread enthält den gesamten Zeichnungs- und Zeitgebercode, den das Fenster mit der springenden Kugel für die Animierung der Kugel benötigt.

Die Anwendung erstellt die Threads jeweils in dem Moment, in dem das untergeordnete MDI-Fenster erstellt wird. Dies geschieht in der in Bounce.cpp bereitgestellten CBounceMDIChildWnd::Create-Funktion. Diese Funktion erstellt sowohl das Fenster als auch den Thread und ordnet ihn dem Fenster zu.

Jedes Mal, wenn Sie ein Animationsfenster schließen, wird der zugeordnete Thread automatisch zerstört. "Hello!"-Fenster besitzen keine eigenen Threads, deren Nachrichten werden vom ersten Thread der Anwendung verarbeitet.

Schlüsselwörter

Dieses Beispiel demonstriert die Verwendung der folgenden Schlüsselwörter:

AfxGetInstanceHandle; AfxMessageBox; AfxRegisterWndClass; CBitmap::CreateCompatibleBitmap; CCmdTarget::OnCmdMsg; CCmdUI::SetCheck; CColorDialog::DoModal; CColorDialog::GetColor; CDC::BitBlt; CDC::CreateCompatibleDC; CDC::DeleteDC; CDC::DrawText; CDC::Ellipse; CDC::FillRect; CDC::GetDeviceCaps; CDC::SelectObject; CDC::SetBkColor; CDC::SetTextColor; CFrameWnd::LoadFrame; CFrameWnd::rectDefault; CGdiObject::DeleteObject; CMDIChildWnd::Create; CMenu::LoadMenu; CRect::Height; CRect::Width; CWinApp::ExitInstance; CWinApp::InitInstance; CWnd::Create; CWnd::DestroyWindow; CWnd::GetClientRect; CWnd::GetCurrentMessage; CWnd::GetDC; CWnd::GetDlgItem; CWnd::GetWindow; CWnd::Invalidate; CWnd::KillTimer; CWnd::MessageBox; CWnd::OnCreate; CWnd::OnDestroy; CWnd::OnLButtonDown; CWnd::OnPaint; CWnd::OnSize; CWnd::OnTimer; CWnd::ReleaseDC; CWnd::SendMessage; CWnd::SetTimer; CWnd::SetWindowPos; CWnd::ShowWindow; CWnd::UpdateWindow; CloseHandle; CreateEvent; CreateThread; EnumChildWindows; GetSysColor; GetVersion; LOWORD; LoadCursor; LoadIcon; LoadMenu; MAKEINTRESOURCE; RGB; SetEvent; Sleep; WaitForSingleObject; max; min

Hinweis:

In diesem und einigen anderen Beispielen wurden die Änderungen an den Visual C++-Assistenten, -Bibliotheken und -Compilern noch nicht nachvollzogen. Sie demonstrieren aber dennoch, wie Sie die gewünschte Aufgabe durchführen können.

Siehe auch

Weitere Ressourcen

MFC-Beispiele