ダイアログ上のボタンを無効化した時に見た目上無効化されていないときの対処法は?

解決


どら  2007-05-18 21:04:17  No: 65149

VS2003 + WinXPでモードレスダイアログのプログラムを作成しています。

この中でグローバル変数として

BOOL fChangeStatus = FALSE;          //然るべき状況が変わった時にTRUEにする

というように、コントロールの有効/無効を変更する状況になったときにTRUEにするフラグをたてて、ダイアログプロシジャの冒頭で

if(fChangeStatus == TRUE)
{
       if(コントロールをEnableにする条件)
       {
              EnableWindow(・・・・・・, TRUE);
              ・・・・
       }
       else
       {
              EnableWindow(・・・・・・, FALSE);
              ・・・・
       }

       //処理が終わったらフラグを戻す
       fChangeStatus = FALSE;
}
switch( msg )
{
       ・・・・
}

というような作りにしています。
適当な処理を行ってfChangeStatusがTRUEになったとき、確かにボタンの有効/無効は切り替わっているのですが・・・

ボタンが無効になったとき、普通ボタンのCaptionがグレーになって無効になっていることが一目で分かるようになりますよね?
ところが、ボタンは無効になっているのですが、見た目が有効の時と変わらない状態になってしまうんです・・・.

なにかすごく単純なところを見落として気がするのですが、見つけられず・・・。

どなたか御指摘いただける方いらっしゃいましたら、おねがいいたします。


mあ  2007-05-18 22:48:58  No: 65150

InvalidateRect だか UpdateWindow だかやってみたらどーですか?
たぶん、有効・無効の指示を出したはいいけど、再描画されない
ので見た目が変化無いだけかと。

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_invalidaterect.asp

http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpgdi/html/_win32_invalidaterect.asp


どら  2007-05-18 23:16:45  No: 65151

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

       //処理が終わったらフラグを戻す
       fChangeStatus = FALSE;

の後に

       InvalidateRect(hDlg, NULL, TRUE);

を追加して、あっさり解決しました。
ありがとうございました!!


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

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






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