ホーム > プログラミング > モデルビューワを作る > 16.モデルファイル読み込みの進捗表示

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)


ご意見、ご感想、ご質問、ご要望等は、「コメントを投稿する」もしくは「ホーム > コンタクト」よりお願いいたします。
内容の誤り、誤字脱字、リンクミスなどの問題点を発見された場合には「コメントを投稿する」もしくは「ホーム > コンタクト」より連絡していただけると幸いです。


Copyright (c) 2005-2018 Nobuki HIRAMINE All rights reserved.