DLGBoxLib/ProgressBarDLG.h File Reference

再帰定義可能なプログレスバーカウンタ More...

#include "DLGBoxBase.h"
Include dependency graph for ProgressBarDLG.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CProgressBarDLG

Namespaces

namespace  jbxwl

Defines

#define PROGRESS_COUNTERMAX   3200

Detailed Description

Author:
Fumi.Iseki (C)
再帰定義可能なビジュアルカウンタ for VC++
これは,VC++で使用できるプログレスバーカウンタである.動的に目盛幅を変更できるため,カウンタ 作成時に作業量の推定が困難な場合でも,ある程度の予測で使用することができる.
また,再帰的に仮想的なチャイルドカウンタをつくることができるので,呼び出した関数にその操作を任せる ことができる.
呼び出される関数のなかでは CVCounter(このカウンタのスパークラス)のカウンタ作っておけば十分で, 呼び出し側で,このカウンタの使用・不使用を決めることができ,汎用性が高い(バーチャル関数の機能による). ディスパッチャーを有効に設定(コンストラクタで設定,デフォルトは無効)すると,PutFill(), SetPos(), StepIt()関数の最後でディスパッチャー関数 DisPatcher()が起動される(classBox.h参照).

ディスパッチャーが有効な時,システムメニューのクローズボタンをクリックすると,isCanceled()関数がtrue になる. 中断可能な作業では,定期的にこの関数をチェックし,trueなら作業を中断することは理にかなった 処理である.

全体の目盛に対して,刻み幅が非常に小さいと,関数の呼び出しが重なり,それだけで重い処理になってしまう. 従って,関連関数(主に上記3種)の呼び出し回数はなるべく少なくなるようにすべきである.

Attention:
リソース IDD_PROGBAR が必要
See also:
classBox.h
使い方 (詳しくはソースを見よ)

1.まず,関数内で使用するためのカウンタへのポインタを宣言する. CProgressBarDLG* counter = NULL;

2.カウンタインスタンスの取得 1) カウンタを生成する. counter = new CProgressBarDLG(IDD_PROGBAR); or 2) または,どこか別の所で定義されたカウンタの目盛りの内,この関数内で自由に使用して よい目盛りの範囲(領域,部分)を得る (チャイルドカウンタを得る) counter = (CProgressBarDLG*)(CNT->GetUsableCounter()); CNTは何処か(例えば呼び出し側関数)で宣言されたカウンタ or 3) または,グローバルカウンタ(のチャイルドカウンタ)を使用する counter = GetUsableGlobalCounter(); ただし,グローバルカウンタはどこかで設定されていなければならない. 設定法 CProgressBarDLG* counter = new CProgressBarDLG(IDD_PROGBAR); SetGlobalCounter(counter);

3.カウンタをスタートさせてプログレスバーを表示する. counter->Start(); or Start(m) m は SetMax(m) される. タイトルの設定は,スタート後でもOK. counter->SetTitle("タイトル");

4.今使えるカウンタ領域に,1〜200までの目盛りを設定 counter->SetMax(200);

5.200のうちの 1〜80までを 100でスケーリングし直す.ローカル目標は80(100)に設定. counter->ResetRate(80, 100);

6.カウンタを1つ(1/100)上げる.実際に表示される目盛りは,ローカル目標を超えることはない. counter->StepIt();

7.ローカル目標まで,目盛りの領域を埋める.ResetRate() の効果はここで終了 counter->PutFill();

8.チャイルドカウンタを作る場合(例). 1) 残り81〜100で,チャイルドカウンターを作る. counter->MakeChildCounter(20); 2) 関数を呼び出し,チャイルドカウンタの取り扱いは呼び出した関数に任せる 呼び出した関数の中で,再びチャイルドカウンタが有効領域として使用される 3) 呼び出した関数が終了したら,チャイルドカウンタを取り消し,親関数へカウンタを返す counter->DeleteChildCounter();

9. カウンタ使用の終了 1) 自分で作った場合は delete する. 2) 何処かで作られたカウンタの場合はそまま何もしない. 3) グローバルカウンタを本体を自分で作成した場合は,グローバルカウンタをクリアして deleteする.

    CProgressBarDLG* counter = new CProgressBarDLG(IDD_PROGBAR);
    SetGlobalCounter(counter);
    .....................
    ClearGlobalCounter();   または   SetGlobalCounter(NULL);
    delete(counter);
CNT xxxxxxxxxxxx--------------------------xxxxxxxxxxx この親関数は xxxx の部分を使用できる ↓関数呼び出し ↑-------------------ccccc↑ counter (---- は自分で使用できる範囲) ↓呼び出し (cccc の部分は呼び出した関数にお任せ) ↑cccc↑ チャイルドカウンタ

Definition in file ProgressBarDLG.h.


Define Documentation

#define PROGRESS_COUNTERMAX   3200

Definition at line 106 of file ProgressBarDLG.h.

Referenced by CProgressBarDLG::CProgressBarDLG(), and CProgressBarDLG::Start().


Generated on 15 Nov 2023 for JunkBox_Win_Lib by  doxygen 1.6.1