はじめまして。
VC++2008のmfcダイアログアプリで開発しています。
言っていることが矛盾しているかもしれませんが、
エディットボックスに入力した文字を取得する際に、
PreTranslateMessage関数などで捕まえたキー入力を、
そのエディットボックスに反映させる前に反映後の文字列を取得する方法がありましたら
ご教示ください。
私が試した方法は、
別にもう1つエディットを用意して、
ダイアログのPreTranslateMessage関数の中でそのエディットのメンバ関数として
PreTranslateMessageを呼び出せば…と
やってみましたが、入力キーは反映されていませんでした。
あとOnKeyDownイベントを呼び出すということもしましたが、やはり反映されていませ
ん。
全部自力で入力結果をエミュレート?する処理を作ることも考えましたが、
シンプルな方法がないかと期待を募り、質問に至りました。
何かよい方法はありますでしょうか。
ON_EN_UPDATEではだめなんですか?
キー入力系のメッセージはキーボードフォーカスを持つ唯一のウインドウに
送られます。大まかなメッセージの順番は
1.WM_KEYDOWN
2.WM_CHAR
3.WM_KEYUP
です。
さて、これらのメッセージが当該のコントロールに処理される前に取得するには、
・フックを使う方法
・当該のコントロールをサブクラス化する方法
等がすぐに思いつきますが、それぞれ利点欠点があり、目的によって
最適な方法や実装が異なります。
自分には質問の文面からは「何がやりたいのか」が読み取れませんでした。
もう少しましな回答を望む場合は、その部分を説明したほうが良いでしょう。
仲澤@失業者さんに賛同
詳細待ちですが一点だけ
>ダイアログのPreTranslateMessage関数の中でそのエディットのメンバ関数として
>PreTranslateMessageを呼び出せば…と
エディットへのキー入力については
ダイアログのPreTranslateMessageで確認できる
引数pMsgのhWndがエディットのものか、またmessageがWM_KEYDOWNであるか確認し、
その際のwParamの値をみればいい(ただし値は、virtual key コードで数字)。
なお、このタイミングは、
エディット表示どころか、エディットの実体に反映する前なので
エディットのメンバ関数やら変数やらを見ても意味はない