VS2003 + WinXPでモードレスダイアログのプログラムを作成しています。
この中でグローバル変数として
BOOL fChangeStatus = FALSE; //然るべき状況が変わった時にTRUEにする
というように、コントロールの有効/無効を変更する状況になったときにTRUEにするフラグをたてて、ダイアログプロシジャの冒頭で
if(fChangeStatus == TRUE)
{
if(コントロールをEnableにする条件)
{
EnableWindow(・・・・・・, TRUE);
・・・・
}
else
{
EnableWindow(・・・・・・, FALSE);
・・・・
}
//処理が終わったらフラグを戻す
fChangeStatus = FALSE;
}
switch( msg )
{
・・・・
}
というような作りにしています。
適当な処理を行ってfChangeStatusがTRUEになったとき、確かにボタンの有効/無効は切り替わっているのですが・・・
ボタンが無効になったとき、普通ボタンのCaptionがグレーになって無効になっていることが一目で分かるようになりますよね?
ところが、ボタンは無効になっているのですが、見た目が有効の時と変わらない状態になってしまうんです・・・.
なにかすごく単純なところを見落として気がするのですが、見つけられず・・・。
どなたか御指摘いただける方いらっしゃいましたら、おねがいいたします。
InvalidateRect だか UpdateWindow だかやってみたらどーですか?
たぶん、有効・無効の指示を出したはいいけど、再描画されない
ので見た目が変化無いだけかと。
mあさん、ありがとうございます。
//処理が終わったらフラグを戻す
fChangeStatus = FALSE;
の後に
InvalidateRect(hDlg, NULL, TRUE);
を追加して、あっさり解決しました。
ありがとうございました!!
ツイート | ![]() |