- - PR -
UserControl上のコントロールで発生するWindowsメッセージを処理するには
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-07-01 23:40
お世話になります。
VB2005でWindowsアプリを作成しております。 コンボボックスとテキストボックスを含んだユーザーコントロールがあります。 このユーザーコントロールのコンボボックスに対するWindowsメッセージを 捕捉することはできますでしょうか? 何をしたいかといいますと・・・ 都道府県名を選択するコンボボックスで「東京」と入力すると「京都」が選択 されます。デバッグしてみると「東」で「東京」が選択され 「京」で「京都」が選択されていることがわかりました。 そこでコンボボックスのWndProcメソッドで WM_IME_STARTCOMPOSITION、WM_IME_ENDCOMPOSITION、WM_IME_CHAR を補足してIME入力確定時にコンボボックスのTextと比較して SelectedIndexを変更するようにしています。 これと同じことをユーザーコントロール内のコンボボックスに たいしても行いたいのですが、うまくいきません。 ユーザーコントロールのWndProcでは WM_IME_STARTCOMPOSITION、WM_IME_ENDCOMPOSITION、WM_IME_CHAR のいずれも発生していなようです。 また、WM_IME_XXXXを補足できたとしてもそれが ユーザーコントロールにたいするものなのか、 ユーザーコントロールのコンボボックスに対するものなのか ユーザーコントロールのテキストボックスに対するものなのか を区別することができるのでしょうか? ユーザーコントロールのテキストボックスに対するIME確定は そのまま処理したいです。 よろしくお願いいたします。 | ||||||||||||
|
投稿日時: 2008-07-01 23:59
下記の文章を読む限り、コンボボックスの派生クラスを既に作成されているのですよね?
であれば、ユーザコントロールにも同じコンボボックスの派生クラスを使えば(配置すれば)良いのでは?
大抵のメッセージは対象となるウィンドウが区別可能と考えられます。 また、ユーザコントロールはある意味、フォームとみなして良いです。 ですので、ユーザコントロール(フォーム)が受けるべきメッセージはユーザコントロール(フォーム)のWndProcに、コンボボックスが受けるべきメッセージはコンボボックスのWndProcに、テキストボックスが受けるべきメッセージはテキストボックスのWndProcに行きます。 解決案 1.ユーザコントロールに配置されているコンボボックスを、WndProcメソッドをオーバーライドしたコンボボックスの派生クラスに置き換える。 2.置き換えられない事情があるならNativeWindowクラスでWndProcを横取りする。 こんなところでどうでしょうか?(分かりにくいかも?) | ||||||||||||
|
投稿日時: 2008-07-02 08:11
回答ありがとうございます。
この方法がありました。 コンボボックスを継承したカスタムコントロールがあるので これを利用してユーザーコントロールで使用してみます。 ・・・よく考えると、なぜユーザーコントロールでカスタムコンボボックスを 使っていないのか、と 早速試してみます。 |
1