CEditでリターンキーを押したときの仕組み – プログラミング – Home

CEditでリターンキーを押したときの...
 
通知
すべてクリア

[解決済] CEditでリターンキーを押したときの仕組み


たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

お世話になっています、たいちうです。
下記の仕組みについてご説明いただけないでしょうか。

環境:Windows NT4 VC++6.0 SP5

1.MFC、ダイアログベースで、ダイアログを作成。
2.デフォルトのコントロールを全て削除。
3.エディットボックスを貼り付け、ビルド、実行。
4.リターンキーを押すと終了。

OnOK()やPreTranslatemassage()で終了させないようにすることはできるのですが、
どのような仕組みでOnOK()が呼ばれているのでしょうか?
コールスタックを見ると、_AfxDispatchCmdMsgやCCmdTarget等が書かれています。

キー入力をダイアログが先に処理して、OnOKを呼んでいるのでしょうか?
(だとすると、何故ボタンにフォーカスがある時にOnOKが呼ばれないのでしょうか?)

それとも、エディットボックスが処理した後、
ダイアログに何らかのメッセージを送っているのでしょうか?

別の原因かも知れませんが、エディットボックスでリターンを押すと、
他のボタンに関連付けられた関数が呼ばれることもあり、
不信を感じています。

MSDNで調べてますがよく判りません。どなたか判りやすく教えていただけないかと、
虫のいいことを思い、書かせてもらいました。

それと、皆さんはリターンキーの処理は、OnOKとPreTranslateMessage、
あるいは他の方法を、どのように使い分けているのでしょうか?


引用未解決
トピックタグ
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

>キー入力をダイアログが先に処理して、OnOKを呼んでいるのでしょうか?

多分
IsDialogMessage()がメッセージを処理します。
(この関数はPreTranslateMessage()内で呼ばれるようです)

処理内容
enter : WM_COMMAND msg, wParam= IDOK or デフォルトボタンのControlID


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

>(だとすると、何故ボタンにフォーカスがある時にOnOKが呼ばれないのでしょうか?)

キーをダイアログが処理するか、コントロールに渡すかは
WM_GETDLGCODEメッセージで判定されます。


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

Bun様、dairygoods様、回答有り難うございます。

ダイアログのPreTranslateMessageが最初に処理するわけですね。
具体的な処理は、CWnd::PreTranslateMessageの中のマクロが
手におえず、判りませんでしたが。

フォーカスを持ったコントロールがメッセージを受け取ると、
勘違いしていました。

CDialog::PreTranslateMessageは、メッセージとフォーカスを持つ
子Windowによって、自分で処理するか、メッセージを渡すかを決めると。

今日も助けていただきました。
有り難うございました。


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/winui/winui/windowsuserinterface/windowing/dialogboxes/dialogboxprogrammingco
nsiderations.asp

ここの

Dialog Box Keyboard Interface の部分に他のキーについても書かれています。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました