ラベルの変更

解決


みやっち  2004-01-07 07:25:18  No: 52973

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

// プログレスバーダイアログの作成
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 23:02:29  No: 52974

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-08 01:16:14  No: 52975

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

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

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


Toshi  2004-01-08 19:35:18  No: 52976

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


みやっち  2004-01-09 04:33:16  No: 52977

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

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

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

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

難しいな・・・


Toshi  2004-01-09 19:18:37  No: 52978

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


fuku  2004-01-10 01:13:48  No: 52979

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

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


みやっち  2004-01-11 03:40:08  No: 52980

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加