メッセージの流れと取得方法

解決


まいまい  2005-09-14 01:09:04  No: 58956

EditBoxに入力した値を、KillFocusのメッセージでチェックし、
エラーがあればEditBoxへフォーカスを戻すといった処理を書い
てます。

ここで一つ困りました。プログラムには終了ボタンを作成して
あるのですが、エラー値を入力して終了ボタンを押下した場合、
KillFocusメッセージが来て、エラーの旨のMsgBoxを表示するの
ですが、ボタン押下(終了時処理)の処理は実行されません。

しかし、ALT+F4や「×」ボタンを押下した場合、エラ
ーのMsgBoxを表示し、OKボタンでMsgBoxを消した後に
「終了しますか?」(OnClose()内で記述)のMsgBoxが
表示されてしまいます。
何故このような動きになるのかわかりません。

処理として「終了したいのにわざわざ正確な値を入力させる」
と言った煩わしさも残る為、ALT+F4キーや「×」ボタンの場合は、
入力値のチェックをせずに終了確認のMsgBoxを出したいと考えて
いるのですが、KillFocusメッセージより前にこれを判別する
方法ってありますか?
ALT+F4の場合は、PretranslateMessageでなんとかなりそうな気が
しますが「×」ボタン押下の場合はどうしようかと悩んでるのですが。

長くなってしまいましたが、メッセージの動き&取得の方法と
合わせてご解答頂けると幸いです。宜しくお願いします。

環境:VC6.0(MFC)のダイアログベースです。


Gak  2005-09-16 00:59:28  No: 58957

> エラー値を入力して終了ボタンを押下した場合
1、終了ボタン押下
2、EditBoxから終了ボタンにフォーカス移動(EN_KILLFOCUS 発行)
3、OnKillFocus(仮)内でMsgBox表示
4、MsgBoxが表示時に WM_CANCELMODE 発行
5、WM_CANCELMODE により終了ボタン押下が無かった事に
6、MsgBox終了
7、OnKillFocus(仮)を抜けて完了

> ALT+F4や「×」ボタンを押下した場合
1、ALT+F4 or 「×」ボタンを押下(WM_SYSCOMMAND[SC_CLOSE] -> WM_CLOSE 発行)
    ※ EditBoxからフォーカスの移動は発生しない
2、OnClose() 内のMsgBoxを表示しようとする
3、ダイアログが非アクティブになる(ここで EN_KILLFOCUS 発行)
4、OnKillFocus(仮)内でMsgBox表示
5、MsgBox終了
6、OnKillFocus(仮)を抜けて完了…
7、では無く、今は OnClose() 内に入っているので OnClose() の処理続行
8、OnClose() 内のMsgBox表示
9、OnClose() を抜けて完了

> 入力値のチェックをせずに終了確認のMsgBoxを出したい
フラグを用意しておいて OnClose() に入った時点でフラグを立てる。
で、フラグが立っている場合は OnKillFocus(仮)内の処理は行わない。
後、OnClose() の終了確認でキャンセルされた時はフラグをクリアする

でどうかと。


まいまい  2005-09-16 01:41:43  No: 58958

上手く処理できました。
ありがとうございました。m(__)m


まいまい  2005-09-16 01:42:09  No: 58959

チェック漏れです。


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

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






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