ラベルの変更

解決


みやっち  2004-01-06 22:25:18  No: 52973  IP: [192.*.*.*]

プログレスバーが増加している間にラベルを変更していきたいのですが
どのようにやっても変更されません。
ソースのどの部分が悪いのでしょうか。


// プログレスバーダイアログの作成
CProgressDialog pd;
pd.m_Label = "プログレスバーテスト中...";
pd.Create(IDD_PROGRESS_DIALOG);
pd.m_ProgressBar.SetRange(0,10);
int i=0;
while(i <= 10){
  // プログレスバーを更新する 
  Sleep(1000);
  pd.m_ProgressBar.SetPos(i);
         pd.m_Label = "更新中";
  i++;
}
// プログレスダイアログを消去する
pd.DestroyWindow();


Createの後のどの部分でやっても変更されません。
何か良い方法があればお教え下さい。
お願い致します。

編集 削除
Toshi  2004-01-07 14:02:29  No: 52974  IP: [192.*.*.*]

CProgressDialogの実装がどうなってるのか分からないので、答え様が無いです。
その実装こそがポイントだと思いますんで・・・
とりあえず、下記URLに掲載されているサンプルを以下の様にいじったら出来ますが・・・

http://www.sado.co.jp/system/taka/progress/

DWORD CMyProgressDialog::ProgressProc()
{
  char  buf[64];

  SetMessage("作業中です...");
  for (int i=0;i<100;i++) {
    if (IsCancel()) break;
    Sleep(100);
    SetProgress(i);
    sprintf(buf,"作業中です...(%03d%%)",i);
    SetMessage((const char *)buf);
  }
  return 0;
}

編集 削除
みやっち  2004-01-07 16:16:14  No: 52975  IP: [192.*.*.*]

Toshiさんありがとうございます。

以下の通りにCProgressDialogを実装しました。

http://hp.vector.co.jp/authors/VA036850/airpark/tips/#progress

編集 削除
Toshi  2004-01-08 10:35:18  No: 52976  IP: [192.*.*.*]

私が示したサンプルを見れば、どこが悪いのかお分かりですね?
m_Label と言うのは、単なる文字列変数で、初期起動時は initDialog で
m_Label の内容が画面に反映されるから良いのですが、処理中では、当然
反映されません。どうやって反映させれば良いのかは、上記サンプルと、
貴方のコードをじっくりと見比べればすぐに分かると思います。

編集 削除
みやっち  2004-01-08 19:33:16  No: 52977  IP: [192.*.*.*]

Toshiさんありがとうございます。

sprintf(buf,"作業中です...(%03d%%)",i);

これを使うって事ですか?

それとも、マルチスレッドにするって事ですか?

難しいな・・・

編集 削除
Toshi  2004-01-09 10:18:37  No: 52978  IP: [192.*.*.*]

C++ や Win32API の知識はある程度有ると言う前提で書いてます。
もし、サンプルのソースを読めないなら、C++の仕様や、Win32APIの仕様再確認
が必要です。
私が示したサンプルでは、m_Label にあたるメンバ変数を CStaticクラスで
定義し、SetMessage() メンバ関数でラベルを更新してるって事です。
注意点としては、SetWindowText()を使いますので、Create後じゃないと使えない
って事です。
この説明でも理解が得られない場合、私が示したサンプルを素直に使ってください。

編集 削除
fuku  2004-01-09 16:13:48  No: 52979  IP: [192.*.*.*]

m_Labelの変更を反映したいタイミングにUpdateData(FALSE)を追加すればいいと思いますが・・・

#私的にはm_LabelはCStatic型にしてm_Label.SetWindowTextで変更しますが

編集 削除
みやっち  2004-01-10 18:40:08  No: 52980  IP: [192.*.*.*]

Toshiさん、fukuさんありがとうございます。

なんとか完成できました。
違う方法でも作る事もできました。
ありがとうございました。

編集 削除