プロパティシートでダイアログを表示すると
デフォルトのカーソルコントロールが存在しない限り
OKボタンにカーソルがあります
その為画面を開くとEnterキーを押すだけで画面を閉じてしまいます。
プロパティシートのOKボタンはクリックされた時のみ閉じるようにしたいんですが
どのようにすれば上手く行くでしょうか?
現在サブクラス化し、WM_KEYDOWNでreturnや
メッセージフックをし、該当するメッセージが来た際にreturn等してみましたが
うまく行きません
よろしくお願いします。
そうしたい理由は何なのですか?
世の中には、フォーカス移動やボタンクリック等にマウスよりもキーボードを主に使いたいという人もいますが、そういう人には使えないアプリになってしまってもよいのでしょうか?
>aetosさん
理由ですが
ユーザー自身がプロパティシートのOKボタンにフォーカスを持っていき
Enterキーを押すのなら構わないのですが
プロパティシートを開いて、初めにOKボタンにフォーカスがあるのが現状嫌になっています
プロパティシートですので、沢山のダイアログを表示し
中にはホットキーコントロールも置いてあります
ホットキー上でEnterキーを押された場合も閉じてしまうので
現状、Enterキーを押されても閉じない用にしたいと思っています。
フォーカスを変えられれば良いのですが
プロパティシートのプロシージャで、初期化の時に
SendMessage( GetDlgItem( hWndProp, IDOK ), WM_KILLFOCUS, 0, 0 );
とプロパティシートのOKボタンのフォーカスをKILLしても
Enterキーを押されると閉じてしまいます。
OKボタンは既定のボタンになっているのでフォーカスが
ボタン上にあるかどうかは関係ないです。
ダイアログ上に既定のボタンがない場合はIDOKが既定に
なるようなのでOKボタンがある場合は難しいかもしれません。
既定のボタンの変更自体は初期化時にDM_SETDEFIDを送ればできます。
エディットボックスに入力中に、Enterを余計に押すと
IDOKが動いてダイアログが閉じる
なんてこともありますな
ダイアログの場合はOnOK()をオーバーライドし
CDialog::OnOK()の呼び出しを制限すれば、Enterで閉じてしまうのを
封じることはできます
(デフォルトのOKボタンを消し、代わりの終了用のボタンとか作っておく)
プロパティシートだと、CPropertySheetクラスを派生させれば
似たようなことできるかもしれない
レス有難うございます。
無事解決致しました!
ツイート | ![]() |