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



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

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

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

プロジェクトを開く

15.で作成したモデルビューワプロジェクトを開きます。
ModelViewerプロジェクトをアクティブプロジェクトにします。
(「メニュー/プロジェクト/アクティブプロジェクトに設定/ModelViewer」を選択します。)

「プログレスダイアログ」コンポーネントの追加

メニュー「プロジェクト/プロジェクトへ追加/コンポーネントおよびコントロール」を選択すると、コンポーネントおよびコントロールギャラリダイアログが表示されます。
Visual C++ Components の中の、「プログレスダイアログ」を選択し、「挿入」ボタンを押します。


「プログレスダイアログコンポーネントを挿入しますか?」ダイアログは、「OK」ボタンを押します。
続くプログレスダイアログは、ダイアログのキャプションに「ファイル読み込み」と入力し、それ以外はデフォルトのままで、「OK」ボタンを押します。


コンポーネントおよびコントロールギャラリダイアログに戻ってきたら、「閉じる」ボタンを押します。


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

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

ModelViewerView.cppにモデルファイル読み込み進捗表示コールバック関数
CallbackDialogProgress
を作成します。
モデルファイル読み込み進捗表示コールバック関数CallbackDialogProgressの前には、
進捗表示ダイアログオブジェクトの宣言
static CProgressDlg* spProgressDlg = NULL;
を追加します。



ModelViewerView.cppのファイルのヘッダー部に
#include "ProgDlg.h"
を追加します。



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

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

CModelViewerView::OnFileOpen関数の







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

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

実行

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

CUBECUBE.stlファイルの読み込み
(画像をクリックすると大きい画像が表示されます)