C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: コマンドメッセージの元になったウィンドウメッセージを特定


(過去ログ 94 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■56015 / inTopicNo.1)  コマンドメッセージの元になったウィンドウメッセージを特定
  
□投稿者/ てつ (6回)-(2010/12/22(Wed) 19:10:55)

分類:[C/C++] 

てつと申します。
VC++9.0で開発しております。

Win32コモンコントロールからその親ウィンドウに対して通知されるWM_COMMAND メッセージのハンドラ関数(OnCommandなど)の中で、
そのメッセージが送出されるきっかけとなったウィンドウメッセージ(WM_KEYDOWNやWM_LBUTTONUPなど)を知りたいのですが、
なにかのAPIで簡単に判定するようなことは可能でしょうか?

具体的には、コンボボックスの選択項目が変更された時の、CBN_SELCHANGE の通知メッセージが、
マウス操作(クリック)によるものか、キー操作(上下矢印キーなど)によるものかを区別したいのです。

コンボボックスのサブクラス化をして、WM_KEYDOWNのすぐあとに、WM_COMMANDでCBN_SELCHANGEが送られてきていれば、キー操作によるものと
判断できるのかと考えたのですが、フラグで状態管理するような方法はとりたくないので、もっとよい方法があれば、教えていただきたいのです。

イメージとしては、処理済みのウィンドウメッセージをバッファリングしておき、
マウスによるものかキー入力によるものかを判定することになるかと思いますが、
そのようなことがシステム側の機能として提供されているものなのでしょうか?

基本的なことがわかっていなくて申し訳ありませんが、ご存知の方がいらっしゃいましたら、ご教授願います。


引用返信 編集キー/
■56020 / inTopicNo.2)  Re[1]: コマンドメッセージの元になったウィンドウメッセージを特定
□投稿者/ オショウ (568回)-(2010/12/23(Thu) 08:46:02)
2010/12/23(Thu) 08:49:31 編集(投稿者)

> そのメッセージが送出されるきっかけとなったウィンドウメッセージ(WM_KEYDOWNやWM_LBUTTONUPなど)を知りたいのですが、
> なにかのAPIで簡単に判定するようなことは可能でしょうか?

  簡単に・・・は、無いでしょう。

> 具体的には、コンボボックスの選択項目が変更された時の、CBN_SELCHANGE の通知メッセージが、
> マウス操作(クリック)によるものか、キー操作(上下矢印キーなど)によるものかを区別したいのです。

  それを行いたい理由は?
  区別する必要がある意味が解りません。

> コンボボックスのサブクラス化をして、WM_KEYDOWNのすぐあとに、WM_COMMANDでCBN_SELCHANGEが送られてきていれば、キー操作によるものと
> 判断できるのかと考えたのですが、フラグで状態管理するような方法はとりたくないので、もっとよい方法があれば、教えていただきたいのです。

  サブクラス化が一般的のように思いますが・・・
  厳密にいうと、ウィンドウメッセージで、順番が必ず入れ替わらないものも
  あれば、入れ替わってしまう可能性があるものもあるので。

> イメージとしては、処理済みのウィンドウメッセージをバッファリングしておき、
> マウスによるものかキー入力によるものかを判定することになるかと思いますが、
> そのようなことがシステム側の機能として提供されているものなのでしょうか?

  WM_KEY_UPが先かWM_MOUSE_UP(ウィンドウメッセージこれであってるかナ〜)
  が先かで判断できるようにも思いますが。

以上。参考まで
引用返信 編集キー/
■56057 / inTopicNo.3)  Re[2]: コマンドメッセージの元になったウィンドウメッセージを特定
□投稿者/ て (1回)-(2010/12/24(Fri) 17:06:20)

No56020 (オショウ さん) に返信
> 2010/12/23(Thu) 08:49:31 編集(投稿者)
>
>>そのメッセージが送出されるきっかけとなったウィンドウメッセージ(WM_KEYDOWNやWM_LBUTTONUPなど)を知りたいのですが、
>>なにかのAPIで簡単に判定するようなことは可能でしょうか?
>
>   簡単に・・・は、無いでしょう。
>
>>具体的には、コンボボックスの選択項目が変更された時の、CBN_SELCHANGE の通知メッセージが、
>>マウス操作(クリック)によるものか、キー操作(上下矢印キーなど)によるものかを区別したいのです。
>
>   それを行いたい理由は?
>   区別する必要がある意味が解りません。
>
>
コンボの状態と連動して、別のGUI要素の状態を変更(反映)するような処理をする際、
・キー入力による変更時は、フォーカス移動するまで反映せず、
・マウス入力による変更時は、即時に反映する
といった操作方法を想定していました。

>>コンボボックスのサブクラス化をして、WM_KEYDOWNのすぐあとに、WM_COMMANDでCBN_SELCHANGEが送られてきていれば、キー操作によるものと
>>判断できるのかと考えたのですが、フラグで状態管理するような方法はとりたくないので、もっとよい方法があれば、教えていただきたいのです。
>
>   サブクラス化が一般的のように思いますが・・・
>   厳密にいうと、ウィンドウメッセージで、順番が必ず入れ替わらないものも
>   あれば、入れ替わってしまう可能性があるものもあるので。
>
>>イメージとしては、処理済みのウィンドウメッセージをバッファリングしておき、
>>マウスによるものかキー入力によるものかを判定することになるかと思いますが、
>>そのようなことがシステム側の機能として提供されているものなのでしょうか?
>
>   WM_KEY_UPが先かWM_MOUSE_UP(ウィンドウメッセージこれであってるかナ〜)
>   が先かで判断できるようにも思いますが。
>

WM_KEYUPとWM_LBUTTONUPを判定条件に使うのは、発想してませんでした。参考になります。

ただ、やはりコモンコントロールの使われ方として、
キー入力か、マウス入力かを区別させないように設計されているように思えるので、
今回は、区別できない仕様で作ることにします。

オショウさん返信ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -