こんばんわー、今回はモードレスダイアログ上のエディットボックスにおける
決定というか、IDOKの出し方についてお聞きしたいと思い書き込みさせて
いただきました。
今まではモーダルダイアログにてダイアログを作成していたのですが、諸所の事情に
よりモードレスダイアログに変更しなくてはならなくなりました。そこでモードレス
ダイアログを作成、表示はできたのですがモーダルダイアログだとエディットボックス
上でエンターを押せばIDOK=決定になっていたのですがそれがモードレスダイアログで
作成したらなくなってしまいました。仕様であるとは思うのですが、依然同様にエンタ
ーで決定(IDOK)状態にすることは可能なのでしょうか?
ご返信のほどよろしくお願いいたします。
可能だと思います。
CDialog::PreTranslateMessage(MSG* pMsg)中で
「エンターキー押下中、かつフォーカスがエディットボックス内」の場合に
CDialog::OnOk()を呼ぶとできるかと。
返信ありがとうございます、でも申し訳ありません、私の書き忘れなのですが、
開発環境は.netでSDKなのです。私の調べが足らないだけかも知れませんがメイ様が
書いてくださった方法はMFCでの方法のようです。そこでもう一度質問させていただき
ます。SDKでモードレスダイアログのエディットボックス内にフォーカスがある状態で
エンターで決定(IDOK)状態にすることは可能なのでしょうか?
ご返信のほどよろしくお願い足します。
詳しくは分かりませんが、MFCでもSDKでも内部的には同じじゃないでしょうか。
SDKでPreTranslateMessageに値するものを調べてみればいかがでしょう?
やってないですが、キーダウンしたメッセージをダイアログボックスより先に取得できれ
ばいいのでは。
エディットボックスをサブクラス化して
WM_KEYDOWNなどを処理すればできると思います。
普通にメッセージループに IsDialogMessage() を入れればいいって話では?(^^;
#現状、[Tab] キーなんかも効いてないんじゃないかしら。
Creating a Modeless Dialog Box
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/winui/winui/windowsuserinterface/windowing/dialogboxes/usingdialogboxes.asp
MFC の CDialog::PreTranslateMessage() に相当する処理は、
SDK では GetMessage() と IsDialogMessage() の間に挟みます。
...などと、ほとんど SDK 経験の無い自分が言うのも何ですが。(^^;;;
DM_GETDEFIDというのを処理してあげればいいです。
返信ありがとうございました。メッセージループにIsDialogMessage()を追加して
やりましたら思ったような動作をするようになりました。返信してくださったメイ様
モトロ様、SG様、Rtty様、たく様、本当にありがとうございました^^