環境:MFC
OnShowWindowをオーバーライドし
画面表示時にラジオボタンのチェック切り替えをしています。
●AAA チェック有
○BBB チェック無
デフォルトが上記のような状態で、
○AAA チェック無
●BBB チェック有
としてから画面を閉じ、再度画面を表示させた場合に
デフォルト状態に戻したく、BBBのチェックを外してAAAにチェックを入れたいです。
そこで、OnShowWindowに以下を記述しています。
AAA.SetCheck( BST_CHECKED );
BBB.SetCheck( BST_UNCHECKED );
こうすると、画面再表示時に一瞬だけBBBにチェックがついた状態が見えて
その後にAAAにチェックがつきます。
この一瞬BBBにチェックが付いてしまうのをやめたいのですが、どうすれば良いでし
ょうか?
更新を止めればいけるかな・・・と思い、
OnShowWindowの中で
AAA.SetRedraw( FALSE );
BBB.SetRedraw( FALSE );
~
AAA.SetRedraw( TRUE );
BBB.SetRedraw( TRUE );
で囲ってみても駄目でした。
BBB.SetCheck( BST_UNCHECKED );
AAA.SetCheck( BST_CHECKED );
の様に、順番を入れ替えるのはもう試しましたか。
あと、ラジオボタンならリソース上でグループ化してしまえば、必ず片方しか選択できな
くなりますので試してみてください。
>仲澤@失業者さん
順番を入れ替えて、どちらのパターンも試しましたが駄目でした。
>ARさん
既にグループ化しています。
そもそも、グループ化していても
AAA.SetCheck( BST_CHECKED );
BBB.SetCheck( BST_CHECKED );
とすると両方チェック出来てしまいますよね・・・
WM_SHOWWINDOWが来たときには、既にWM_PAINT済みなのかもしれません。
この場合は、表示=>消去 のタイミングで設定を戻すしかないかもしれませんね。
仲澤さんの意見通り、On_Paint()で初期化されている可能性がありますね。
WM_SHOWWINDOW時にフラグを立てて、On_Paint()で変更するでいいのでは?
ダイアログでないときは、On_Draw()ですね。
やはり、直すのはできるだけ1箇所で行った方がいいですね。