MTMDI でサンプル:MFC ユーザー インターフェイス スレッドを示します

MTMDI サンプルでは、ユーザー インターフェイス イベントがメイン アプリケーション スレッドとは別のスレッドで処理される、MFC ユーザー インターフェイス スレッドの例を示します。 このサンプルは、シングルスレッド MDI サンプルを変更したものです。

MTMDI では、ボールが弾むウィンドウを別のスレッドに置くことが合理的であると説明しているわけではありません。 シングル プロセッサ コンピューターの場合は、MDI サンプルと MTMDI サンプルの違いがわからない可能性があります。 マルチプロセッサ コンピューターでも、ウィンドウ タイマーに基づいてボールが動いている場合は、この違いがわからない可能性があります。

しかし、MTMDI では MFC ユーザー インターフェイス スレッドを実装する方法を示しています。 MDI サンプルと MTMDI サンプルのソースを比較して、MFC ユーザー インターフェイス スレッドを使用した場合のプログラミング オーバーヘッドに注目してください。

MTMDI のプログラミング オーバーヘッドは、ユーザー インターフェイス スレッドを使用するにはプログラミング コストを正当化できる相当の理由が必要であることを警告しています。 MFC でよく使用されるスレッドのタイプはワーカー スレッドです。ワーカー スレッドの例は、MTRECALC サンプルにあります。

セキュリティに関するメモセキュリティに関するメモ

このサンプル コードは概念を示すためのものであり、その概念に関連するコードのみを示しています。特定の環境について必ずしもセキュリティ要件を満たしていませんので、そのまま使用しないでください。セキュリティおよびエラー処理コードを追加して、プロジェクトをより安全かつ堅牢にすることをお勧めします。これらのサンプル コードは、現状有姿のままで提供されるものであり、一切保証されていません。

サンプルとそのインストール手順を取得するには

Visual Studio のサンプルにアクセスするには

  • [ヘルプ] メニューの [サンプル] をクリックします。

    既定では、これらのサンプルは drive:\Program Files\Microsoft Visual Studio 10.0\Samples\ にインストールされています。

  • このサンプルの最新版および他のサンプルの一覧については、MSDN Web サイト上で Visual Studio サンプル 」を参照してください。

サンプルのビルドと実行

MTMDI サンプルをビルドおよび実行するには

  1. MtMdi.sln ソリューション ファイルを開きます。

  2. [ビルド] メニューの [ビルド] をクリックします。

  3. でデバッグ メニューの、[デバッグなしで開始 をクリックします。

ファイル メニューを使用して 2 つの異なる種類の新しいウィンドウを作成することができます。 ウィンドウを作成すると、アプリケーションは、これらのメニューのいずれかのコマンドを使用して、ウィンドウ内の項目の属性を変更くれます。 Color, Speed, Window, and Help. なお、「こんにちは!」ウィンドウには、速度 メニューはありません。

MTMDI 利用の独自の CWinThread- CBounceThread と呼ばれるクラスを派生します。 CBounceThread Mtbounce.cpp ファイルで実装されています。 このスレッドには、ウィンドウ内で弾むボールをアニメーション表示するために必要な描画とタイミングのすべてのコードが含まれています。

アプリケーションでは、MDI 子ウィンドウが作成されるのと同様に、各スレッドが作成されます。 これは Bounce.cpp で見つかった CBounceMDIChildWnd::Create 関数で発生します。 この関数は、ウィンドウと、スレッドのウィンドウに関連付けて、スレッドの両方を作成します。

ボールが弾むウィンドウを閉じると、関連付けられたスレッドは自動的に破棄されます。 [Hello] ウィンドウには独自のスレッドがないため、メッセージはアプリケーションのプライマリ スレッドによって処理されます。

Keywords

このサンプルでは、次のキーワードを使用します。

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

注意

このサンプルを含む一部のサンプルには、Visual C++ のウィザード、ライブラリ、およびコンパイラの変更が反映されていませんが、必要なタスクを実行する方法は示されています。

参照

その他の技術情報

MFC サンプル