モードレスダイアログのエディットボックスのエンター

[戻る]
秋桜 [E-Mail] [HomePage] 2004/10/28(木) 23:46:56
 こんばんわー、今回はモードレスダイアログ上のエディットボックスにおける
決定というか、IDOKの出し方についてお聞きしたいと思い書き込みさせて
いただきました。
 今まではモーダルダイアログにてダイアログを作成していたのですが、諸所の事情に
よりモードレスダイアログに変更しなくてはならなくなりました。そこでモードレス
ダイアログを作成、表示はできたのですがモーダルダイアログだとエディットボックス
上でエンターを押せばIDOK=決定になっていたのですがそれがモードレスダイアログで
作成したらなくなってしまいました。仕様であるとは思うのですが、依然同様にエンタ
ーで決定(IDOK)状態にすることは可能なのでしょうか?

 ご返信のほどよろしくお願いいたします。

メイ 2004/10/29(金) 09:10:47
可能だと思います。

CDialog::PreTranslateMessage(MSG* pMsg)中で
「エンターキー押下中、かつフォーカスがエディットボックス内」の場合に
CDialog::OnOk()を呼ぶとできるかと。

秋桜 [E-Mail] [HomePage] 2004/10/29(金) 18:45:12
 返信ありがとうございます、でも申し訳ありません、私の書き忘れなのですが、
開発環境は.netでSDKなのです。私の調べが足らないだけかも知れませんがメイ様が
書いてくださった方法はMFCでの方法のようです。そこでもう一度質問させていただき
ます。SDKでモードレスダイアログのエディットボックス内にフォーカスがある状態で
エンターで決定(IDOK)状態にすることは可能なのでしょうか?

 ご返信のほどよろしくお願い足します。

モトロ 2004/10/30(土) 22:00:50
詳しくは分かりませんが、MFCでもSDKでも内部的には同じじゃないでしょうか。
SDKでPreTranslateMessageに値するものを調べてみればいかがでしょう?

やってないですが、キーダウンしたメッセージをダイアログボックスより先に取得できれ
ばいいのでは。

SG 2004/10/30(土) 22:09:41
エディットボックスをサブクラス化して
WM_KEYDOWNなどを処理すればできると思います。

Rtty 2004/10/31(日) 02:10:30
普通にメッセージループに 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 経験の無い自分が言うのも何ですが。(^^;;;

たく [E-Mail] 2004/11/01(月) 11:05:41
DM_GETDEFIDというのを処理してあげればいいです。

秋桜 [E-Mail] [HomePage] 2004/11/01(月) 21:23:27
[[解決]]
 返信ありがとうございました。メッセージループにIsDialogMessage()を追加して
やりましたら思ったような動作をするようになりました。返信してくださったメイ様
モトロ様、SG様、Rtty様、たく様、本当にありがとうございました^^

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