プロパティシートやダイアログをクリックだけで閉じるには

解決


Azu  2009-06-30 23:04:33  No: 70482

プロパティシートでダイアログを表示すると
デフォルトのカーソルコントロールが存在しない限り
OKボタンにカーソルがあります

その為画面を開くとEnterキーを押すだけで画面を閉じてしまいます。
プロパティシートのOKボタンはクリックされた時のみ閉じるようにしたいんですが
どのようにすれば上手く行くでしょうか?

現在サブクラス化し、WM_KEYDOWNでreturnや
メッセージフックをし、該当するメッセージが来た際にreturn等してみましたが
うまく行きません

よろしくお願いします。


aetos  2009-06-30 23:41:37  No: 70483

そうしたい理由は何なのですか?

世の中には、フォーカス移動やボタンクリック等にマウスよりもキーボードを主に使いたいという人もいますが、そういう人には使えないアプリになってしまってもよいのでしょうか?


Azu  2009-06-30 23:58:32  No: 70484

>aetosさん
理由ですが

ユーザー自身がプロパティシートのOKボタンにフォーカスを持っていき
Enterキーを押すのなら構わないのですが
プロパティシートを開いて、初めにOKボタンにフォーカスがあるのが現状嫌になっています
プロパティシートですので、沢山のダイアログを表示し
中にはホットキーコントロールも置いてあります
ホットキー上でEnterキーを押された場合も閉じてしまうので
現状、Enterキーを押されても閉じない用にしたいと思っています。

フォーカスを変えられれば良いのですが
プロパティシートのプロシージャで、初期化の時に
SendMessage( GetDlgItem( hWndProp, IDOK ), WM_KILLFOCUS, 0, 0 );
とプロパティシートのOKボタンのフォーカスをKILLしても
Enterキーを押されると閉じてしまいます。


subaru  2009-07-01 20:29:24  No: 70485

OKボタンは既定のボタンになっているのでフォーカスが
ボタン上にあるかどうかは関係ないです。

ダイアログ上に既定のボタンがない場合はIDOKが既定に
なるようなのでOKボタンがある場合は難しいかもしれません。
既定のボタンの変更自体は初期化時にDM_SETDEFIDを送ればできます。


ryo  2009-07-01 21:23:14  No: 70486

エディットボックスに入力中に、Enterを余計に押すと
IDOKが動いてダイアログが閉じる

なんてこともありますな

ダイアログの場合はOnOK()をオーバーライドし
CDialog::OnOK()の呼び出しを制限すれば、Enterで閉じてしまうのを
封じることはできます
(デフォルトのOKボタンを消し、代わりの終了用のボタンとか作っておく)

プロパティシートだと、CPropertySheetクラスを派生させれば
似たようなことできるかもしれない


Azu  2009-07-02 04:29:37  No: 70487

レス有難うございます。
無事解決致しました!


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

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






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