実は今回紹介する方法は、もしかしたら正しくないのかもしれません。ダイアログベースのプログラムで以下の条件を満たし、プログレスバーを表示したいと考えました。スレッド実行中はモーダルダイアログを表示させること。モーダルダイアログではプログレスバーを表示し進捗が分かること。実行中のスレッドはダイアログのメンバーにアクセスできること。スレッド処理が完了次第、モーダルダイアログを閉じること。マルチスレッドに対して理解がないので、鵜吞みにせずこういった実装もできるという雑記程度に見ていただければと思います。まとめプロジェクト作成まずはいつも通りにプロジェクトを作成しましょう。StudioをインストールしてMFCを動かそう外観(リソースビュー)プロジェクトを作成したら、リソースエディターにて以下のようなダイアログを作成します。これをDIALOG1としましょう。次に、スレッドを実行中に表示するモーダルダイアログを作成します。これをDIALOG2とします。[Dialog]を選択し、[新規作成]クリック新しいダイアログがリソースエディターに表示されます。Control]を追加し以下のようなダイアログを作成します。これで外観は完成としましょう。クラス・変数の追加DIALOG1まず、先に作ったダイアログ(DIALOG1)にボタンを押下された際のイベントハンドラーを追加します。リソースエディターで追加したボタンを右クリック[イベントハンドラーの追加]クリック[メッセージの種類]が「BN_CLICKED」となっていることを確認し、[追加して編集]をクリック。DIALOG2次にプログレスバーを追加したモーダルダイアログ(DIALOG2)にもクラス、変数を追加します。クラス追加ウィザードに以下の内容で入力します。クラス名:CPrgDlg基底クラス:CDialog[完了]ボタンをクリックします。ここでPrgDlg.hの編集、ソースエディターになりますが再度リソースエディターに戻り、変数と仮想関数の追加を行います。Control]が選択された状態で右クリック[変数の追加]クリックメンバー変数の追加ウィザードに以下の内容で入力します。アクセス:private変数名:m_PrgCtrl他はデフォルトのままです。(変数の種類:CProgressCtrlなど)[完了]ボタンをクリックします。次に、基底クラスの仮想関数をオーバーライドします。ダイアログ全体を選択し右クリック[クラスウィザード]クリック仮想関数タブに合わせ、以下の2つをダブルクリックします。OnInitDialogWindowProc[OK]ボタンをクリックし、クラスウィザードを閉じます。ここまでで、リソースエディターからの編集は完了です。次に実行される制御関数と実際にメンバー変数などを扱う実行メンバー関数を定義します。ヘッダーファイルの編集{プロジェクト名}Dlg.hさて、まずはヘッダーファイルに制御関数と実行メンバー関数、そしてDIALOG2から監視されるカウンタを宣言します。nCount;}プログレスバーを表示するDIALOG2から、制御用のカウンターにアクセスしたいのでフレンドクラスとしてCPrgDlgを追加しました。pParam);を定義します。付いているため、メンバー変数にはアクセスできません。ThreadProc();も宣言します。このThreadProc()は、ThreadProc(LPVOID)の中から呼ばれることになります。長くなってしまうのでソースコードは明日編集することにしましょう。まとめ冒頭で「正しくないかもしれません。C++の書籍などを購入し、セマフォなども踏まえてしっかり学習をするべきです。私の実装でも概ね目的は達成できていますが、堅牢なプログラムというにはほど遠い状態です。暫定の実装くらいに考えておいてください。前回に引き続き、C++のプリプロセッサの復習です。前回は#includeと#defineについて記事にしましたが、【まとめ】にも記載の通り、#defineと関連するプリプロセッサは多くあります。出力先の指定などフォルダー選択のダイアログを表示させたいことがあります。フォルダー選択ダイアログを表示させるためには、SHBrowseForFolder関数を使います。前回はボタンが押された際のイベントハンドラーを実装しました。Controlについて実装してみましょう。...C++でインターフェイスを作成しよう。私事ですが今後業務ではC++を使用することになりそうです。インストールを行ったOpenCVライブラリを使ってサンプルプログラムをいくつか作成してみましょう。