キャンセル可能な処理と、それを呼び出し、進行中にはプログレスバーを表示するクラス群を定義します。
- VS2013で作成したプロジェクトです。
- C++-11の非同期処理機能 (
std::async
,std::future
) を使っています。 - 処理完了後にプログレスダイアログを閉じさせるために、独自のメッセージ(
WM_CLOSE_PROGRESS_DIALOG
)を定義しています →stdafx.h
- クラス図・シーケンス図
- コンセプト実装部分 (流用するもの)
ICancelable
CancelableProcessBase
CProgressDialog
- サンプル実装部分 (捨てて良いもの)
ConcreteProcess
CProgressDialogDlg
CProgressDialogApp
CancelableProcessBase
から派生させた処理クラスを定義する- 上記派生クラスの
DoImpl()
メソッドを実装する (適宜ShouldCancel()
を使い、UI側からキャンセル要求が来ていないか確認すること) - 処理させたいタイミングで、上記クラスのインスタンスを生成する
CProgressDialog
クラスのインスタンスを生成する (コンストラクタに、上記インスタンスを渡す)DoModal()
するDoModal()
の戻り値がIDOK
かどうかにより、正常終了 or 異常終了に対応した後処理を実行する