7さん、レスありがとうごさいます。
教えていただいたサブクラスを使う方法、実行してみたのですが、
どうもこちらの環境(WinMe/AB4.24)ではうまく行かないようです。
エンターの入力を取ってくれなく、エディットのフォーカスが他へ移らないままです。
(こちらのプログラムの組み具合が悪いのかもしれません。もしそうだったら
申し訳ありません。)
実は「フック」という方法を試す前に、検索エンジンで調べて
"ActiveBasic講座「ウィンドウのサブクラス化(1)-実践」"というページを
見つけました。
http://www.2chab.net/pukiwiki/index.php ... C%C2%C1%A9
"エディットボックスをサブクラス化してエディットボックス入力中の
リターンキーの入力を検出しメッセージボックスでエディットボックスの内容を
表示してみます"
という説明で、これはほとんど自分のやりたいことそのものズバリだと
思って見ながら組んでいたのですが、(そのページでは「メインウインドウ」で
作られていたので)、そのプログラムを「モーダルダイアログ」に移したところ、
動かなくなってしまいました。エンターキーの反応が無くなってしまい。
あれこれ考えながら、サブクラス内のメッセージ取得状態を見てみると、
(頂いたプログラムでは「#prompt」としてEditBoxProc()内先頭に
「Print "dwMsg=";dwMsg」と入れてみて下さい。)
モーダルダイアログを開き、エディットボックスをアクティブにして
ここで「a」キーを押すと、
dwMsg=135
dwMsg=256
dwMsg=135
dwMsg=258
dwMsg=642
dwMsg=257
とズララと表示され、
(二番目の"dwMsg=256"がWM_KEYDOWN、
最後の"dwMsg=257"がWM_KEYUPだと思います。)
しっかりとWM_KEYDOWNメッセージが取れていて
SelectCase分岐に入っていることが分かります。
ところが、同様に「エンター・キー」を押してみると、
dwMsg=135
dwMsg=135
dwMsg=257
と表示されWM_KEYUPはあるものの
WM_KEYDOWNが無い。。。
何故なんだろうと思いつつ、モーダルダイアログで
ダメなんならとりあえず出来てるメインウインドウで続けて
みようかなと思ったのですが
このメインウインドウでは「TABキーでのコントロール移動」が
効いていないことに気が付き、、、
そこでまた調べて、
「TABキーでのコントロール移動」のためには
Window Message Loop内に
「IsDialogMessage(hMainWnd, msgMain)」
という命令を挿入すれば良いとあったので、
ここにソースが表示されます。 [ここをクリックすると内容が表示されます] [ここをクリックすると非表示にします]
コード: 全て選択
'---------------------------
' Window Message Loop
'---------------------------
Dim msgMain As MSG, iResult As Long
Do
iResult=GetMessage(msgMain,0,0,0)
If iResult=0 or iResult=-1 Then Exit Do
If IsDialogMessage(hMainWnd, msgMain) Then Continue
TranslateMessage(msgMain)
DispatchMessage(msgMain)
Loop
' Call destructores and exit process
End
早速そう書いて実行してみると確かにTAB移動が可能に、ところが、、
今度は肝心のエディットでのエンターキー受付が
効かなくなってしまっている。。。
これじゃモーダルダイアログの時と症状が同じ。
そんなこんなで他に方法はと思い前述の
「フック」という方法に辿り着いたのですが、
そこから先は初めの質問に書いた通りです。
感じとしては「IsDialogMessage」という命令が
エンターキーなどの特殊キーのメッセージを抱え込んじゃって
いるような印象を受けたんですが、詳しいメカニズムは
サッパリです。
エディットでのエンター決定、そこからOKボタンの
確定エンター押し、というのは、割とどこにでもある
それほど特別な機能でも無いような気がするので
出来れば是非実現したいと思っています。
それからご指摘のように「SetFocus」で単にフォーカスを
投げるやり方はいかにも不自然だと自分でも思います。
要するに、"エディットを抜けて、コントロール移動ループに
復帰(TABで次のコントロールに移るように)する"ということが
出来ればいいんですよね。ただそれが中々。
良い方法があればまた教えてください。レス、ありがとうございました。