- - PR -
keyPreviewはあって、mousePreviewはない??
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-10 17:59
マウスのイベントをフォームで一括してもらう方法はありませんでしょうか?
Window message を直接調べる方法以外にあれば助かります。 | ||||||||
|
投稿日時: 2005-10-10 18:14
こんにちは。.NET素人のTdnr_Symです。
Window message を直接調べる方法でスイマセン。 WindowProcをオーバーライドして、 WM_MOUSEFIRST(0x0200)からWM_MOUSELAST(0x020D)までのメッセージをフックすれば可能だと思います。 WM_MOUSELASTはOSのバージョンによって値が変わる可能性があるので注意が必要です。 [ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2005-10-10 18:15 ] | ||||||||
|
投稿日時: 2005-10-10 19:49
Tdnr_Symさん、ありがとうございます。
WindowProcのオーバーライドは最後の手段としてとっておきたいと思っています。 とりあえず、一気に子コントロールにイベントハンドラをaddhandlerして、しのいでいます。 子の子のコントロールにも仕込もうかと思ったのですが どうも美しくないので、なにかよい方法がありそうで MousePreviewを探していたのです。 どうも、ありがとうございました。 | ||||||||
|
投稿日時: 2005-10-11 08:46
こんにちは、じゃんぬ です。
Framework で用意されているものでも、中身が美しくないものが存在します。 でも、外からでは美しく見えますよね? なぜでしょうか? つまり、MousePreview みたいなプロパティを実装して、 イベントを追加定義して、そこでやれば美しく見えるのではないでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-10-19 21:50
じゃんぬねっとさん。返事がおそくなって申し訳ありませんでした。
忙殺されて未解決のままになっている案件がいくつかまだ残っているのですが 本件もとりあえずしのいでいる状態という感覚で、自分なりに整理がついておりません。 さて。
確かにそういう実装の現実はよくあることですし、 ひとつひとつこつこつとプログラムを書き上げていくことは 私にはそれが理にかなったものであれば「美しい」ものであると考えています。 子の子にまでイベントハンドラを仕込むということは 管理上好ましい仕様になっていないということを意味していて プログラム的にはきっと楽なんだろうけれど、根本的になにかおかしい 理論的になにか間違っているんじゃなかろうかということがなんとなく引っかかっている そんなような気持ちの悪さが「美しくない」という表現になったのかなと思います。 おそらく、Windows message を拾うのが一番「スマート」なように思えます。 なぜにKeyPreviewはあるのにMousePreviewがないのか、少し考えてみたいと思います。 その必要性がないのかもしれません。 今はあまり時間がとれません。そのうちまた、考えをまとめて書くかもしれません。 いろいろ、ありがとうございました。 | ||||||||
|
投稿日時: 2005-10-20 08:50
ですから、これを拾った時にイベントを Raise するという意味で、 > つまり、MousePreview みたいなプロパティを実装して、 > イベントを追加定義して、そこでやれば美しく見えるのではないでしょうか? と書きました。
これには同意です。 Windows の GUI 的に必要ないからですね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-11-01 23:29
こんにちは。
懸案事項が多くて、返信していないのがたくさんあるかもしれません。 ごめんなさい。 さて、 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=25643&forum=7&4 を見つけて、そういえばと思い出して返信するしだいです。 WndProcをオーバーライドしてもメッセージがこないとなると 私の想定していた手法は無理ということになりそうです。 やはりUI的に何かが間違っているのだろうと思うしかないのですが なにが間違っているのかがよくわからないままになってしまいました。 なぜMousePreViewってないのでしょうか? ないほうがよいものなのでしょうか? とりあえず、なくてもしのげているからあまり気にしてはいないのですが しのげるからいらないというものでもない気がしますし。。。 未だにわからないままです。 | ||||||||
|
投稿日時: 2005-11-02 00:08
こんばんは。
再び.NET素人の発言で恐縮なのですが…
WndProcをオーバーライドしてもメッセージが取れないんだったら、 メッセージフィルタ(IMessageFilter)を噛まして、メッセージを監視したらいいのではないのでしょうか? これですと、あるUIスレッドのメッセージキューに対して、 そのスレッドに属する各コントロール(ウィンドウ)にメッセージがディスパッチされる前に メッセージをフックすることができます。
どうでしょうか? |
1