16.モデルファイル読み込みの進捗表示



15.で作成したモデルビューワは、ファイルサイズの大きなモデルファイルを読み込んだ際など、ファイル読み込み開始からファイル読み込み完了まで時間を要する場合に、ソフトウェアが固まったかのような状態になります。
モデルファイル読み込みの進捗表示ダイアログを表示し、ファイル読み込み開始からファイル読み込み完了まで時間を要する場合でも、ソフトウェアが固まったかのような状態にならないようにします。

プロジェクトを開く

15.で作成したモデルビューワプロジェクトを開きます。

「プログレスダイアログ」を新規作成する

「リソースビュー/ModelViewer/ModelViewer.rc/Dialog」とツリーを開き、右クリックメニューから「Dialogを挿入」を選択します。

下図のようなデザインのダイアログを作成します。



ダイアログのIDを、 「IDD_DIALOG1」 から 「IDD_PROGRESS」 に変更します。
ダイアログのCaptionを、 「Dialog」 から 「進捗」 に変更します。
ダイアログのVisibleを、 「False」 から 「True」 に変更します。
スタティックコントロール(「0%」表示されているコントロール)のIDを、 「IDC_STATIC」 から 「IDC_STATIC_PERCENT」 に変更します。
プログレスコントロールのIDを、 「IDC_PROGRESS1」 から 「IDC_PROGRESS_MAIN」 に変更します。
「OK」ボタンは削除します。

ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスを新規作成する

「プログレスダイアログ」上で右クリックメニューから「クラスの追加」を選択します。

クラス名:CProgressDialog
基本クラス:CDialog



「完了」ボタンを押します。

ビルドし、エラー、警告がないことを確認します。

プログレスダコントロールメンバ変数の追加

「IDC_PROGRESS_MAIN」 プログレスコントロール上で右クリックメニューから「変数の追加」を選択します。

変数名:m_progressMain



「完了」ボタンを押します。

ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスのメンバ変数、メンバ関数の宣言の追加

ProgressDialog.h のプログレスダイアログクラス定義の最初にメンバ変数、メンバ関数の宣言を追加します。



ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスのコンストラクタ、デストラクタの編集

ProgressDialog.cpp のプログレスダイアログクラスのコンストラクタ、デストラクタを以下のように編集します。



ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスのメンバ関数の定義の追加

ProgressDialog.cpp にメンバ関数の定義を追加します。



ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスにCreate関数の追加、編集

プロパティウィンドウを用いて、プログレスダイアログクラスに Create関数 を追加します。
Create関数のインターフェースを

BOOL CProgressDialog::Create(CWnd* pParentWnd)

に変更します。(ProgressDialog.cpp および ProgressDialog.h を編集します。)

Create関数を以下のように編集します。



ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスにDestroyWindow関数の追加

プロパティウィンドウを用いて、プログレスダイアログクラスに DestroyWindow関数 を追加します。

DestroyWindow関数を以下のように編集します。



ビルドし、エラー、警告がないことを確認します。

「プログレスダイアログ」クラスにOnCancel関数の追加

プロパティウィンドウを用いて、プログレスダイアログクラスに OnCancel関数 を追加します。

OnCancel関数を以下のように編集します。



ビルドし、エラー、警告がないことを確認します。

モデルファイル読み込み進捗表示コールバック関数の作成

ModelViewerView.cpp のファイルのヘッダー部に
#include "ProgressDialog.h"
進捗表示ダイアログオブジェクトの宣言
モデルファイル読み込み進捗表示コールバック関数定義
を追加します。



ビルドし、エラー、警告がないことを確認します。

LoadModel関数にコールバック関数を渡す

ModelViewerView.cpp のCModelViewerView::OnFileOpen関数の







と書き換えます。
(LoadModel関数呼び出しの前に
 CallbackProgressDialog( -1, 0 );を追加し、
 LoadModel関数呼び出しの後に
 CallbackProgressDialog( 0, -1 );を追加し、
 LoadModel関数呼び出しの第2引数を、NULLから
 (FARPROC)CallbackProgressDialogに変更します。)

ビルドし、エラー、警告がないことを確認します。

実行

実行し、ファイルサイズの大きなモデルファイルを読み込み、モデルファイル読み込み進捗ダイアログが表示されるのを確認します。

ダウンロード

実行形式ファイルダウンロード (ModelViewerOpenGLMFC2005_16_exe.lzh)

ソースファイルダウンロード (ModelViewerOpenGLMFC2005_16_src.lzh)