ラジオボタン再表示時に一瞬チェックが付くのをやめたい

[戻る]
DTY 2017/03/06(月) 18:02:22
環境: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 );
で囲ってみても駄目でした。

仲澤@失業者 [E-Mail] 2017/03/08(水) 17:01:05
BBB.SetCheck( BST_UNCHECKED );
AAA.SetCheck( BST_CHECKED );

の様に、順番を入れ替えるのはもう試しましたか。

AR 2017/03/08(水) 23:52:09
あと、ラジオボタンならリソース上でグループ化してしまえば、必ず片方しか選択できな
くなりますので試してみてください。

DTY 2017/03/09(木) 11:43:11
>仲澤@失業者さん
順番を入れ替えて、どちらのパターンも試しましたが駄目でした。

>ARさん
既にグループ化しています。

そもそも、グループ化していても
AAA.SetCheck( BST_CHECKED );
BBB.SetCheck( BST_CHECKED );
とすると両方チェック出来てしまいますよね・・・

仲澤@失業者 2017/03/09(木) 13:01:56
WM_SHOWWINDOWが来たときには、既にWM_PAINT済みなのかもしれません。
この場合は、表示=>消去 のタイミングで設定を戻すしかないかもしれませんね。

ITO 2017/03/10(金) 14:42:47
仲澤さんの意見通り、On_Paint()で初期化されている可能性がありますね。
 WM_SHOWWINDOW時にフラグを立てて、On_Paint()で変更するでいいのでは?
ダイアログでないときは、On_Draw()ですね。
やはり、直すのはできるだけ1箇所で行った方がいいですね。

古いスレッドには追加発言できません。