2009-07-07 7 views
1

この質問How to detect mouse wheel tiltには、必要なコードを示す回答が掲載され、受け入れられています。私のアプリがマウスホイールの傾きメッセージを受け取っていないのはなぜですか?

私のアプリケーションの既存のWndProcメソッド(これはトラップする必要がある他のメッセージに有効)では実装されていますが、機能しません。私はチェックして、WndProcは、マウスホイールを傾けたときにメッセージが全く出てこないように見えて、0x020Eの値を持っています。

.NET 3.5 SP1がインストールされたWindows XP SP3(完全にパッチ適用済み)でMicrosoft Wireless Laser 5000を使用しています。

Intellipointドライバをバージョン7.0.258.0(08/05/2008)に更新しました。

他のアプリケーション(Visual Studio、Word、paint.NETなど)がマウスホイールを傾けて動作しているため、アプリケーションにする必要がありますが、間違っていることはわかりません。ただ、完全性について

はここに私のコードです:

protected override void WndProc(ref Message m) 
    { 
     Trace.WriteLine(string.Format("0x{0:X4}", m.Msg)); 
     switch(m.Msg) 
     { 
      case WM_EXITSIZEMOVE: 
       Opacity = 1.0; 
       break; 
      case WM_SYSCOMMAND: 
       int command = m.WParam.ToInt32() & 0xfff0; 
       if (command == SC_MINIMIZE && this.minimizeToTray) 
       { 
        MinimizeToTray(); 
       } 
       break; 
      case WM_MOUSEHWHEEL: 
       // Handle tilting here 
       break; 
     } 
     base.WndProc(ref m); 
    } 

Trace.WriteLineコールは、チルトメッセージが通過しているかどうかを確認しようとする試みです。他のメッセージWM_EXITSIZEMOVEおよびWM_SYSCOMMANDが受信されています。私はそれが他のアプリケーションがメッセージを受信して​​いるとして、故障していたハードウェアではありません99%確信しているように私には、[ハードウェア]タグを削除

private const int WM_EXITSIZEMOVE = 0x0232; 
    private const int WM_SYSCOMMAND = 0x0112; 
    private const int SC_MINIMIZE = 0xF020; 
    private const int WM_MOUSEHWHEEL = 0x020E; 

注:メッセージは以下のように定義されています。

UPDATE

私は自分のアプリケーションにスクロールバーを複数行のテキストボックスを追加しましたし、それが受信して、マウスホイールのチルトメッセージに作用します。だから私がする必要があるすべては、そのためのコードを見つけることです。)スーパーユーザの

UPDATE

This questionこの上でいくつかのベアリングを有することができる - 私はそこの答えに目をしておこう。

+0

フォームにWndProcを使用していますか? –

+0

@ダニエル - はい、私は質問でそれを明確にしていたはずです。 – ChrisF

+0

@skaffman - ハードウェアタグについてはわかりません。私はマウスが正しく機能していることを99%確信しています - 傾きを扱う他のアプリケーションについての私の注意を見てください。 – ChrisF

答えて

1

Spy ++を使用して、受信したメッセージを確認します。

EDIT:(!)また、名前あなたが受け取ったメッセージのを取得することができWndProcメソッドでm.ToString()を呼び出すことができます。 (これは、Syetm.Windows.Forms.MessageDecoder.MsgToStringの巨大なswitch文によって行われます)

メッセージは、フォーム自体ではなく、フォーカスを持っているコントロールにのみ送信されることがあります。その場合はかもしれませんmessage filterを使用します。

また、異なるマウスが異なるマウスホイールメッセージを送信することに注意してください。 Logitechのマウスの0x20EにはWParamがあり、左スクロールは負、右スクロールは正です。(コメントへのREPONSE中)


EDIT

は、水平スクロールは垂直スクロール後に長い添加し、古いプログラムでサポートされていないことに注意してください。したがって、マウスドライバは水平スクロールバーを探して明示的にスクロールすることができます。フォームに水平スクロールバーを追加して、ユーザーが表示しないように負の位置に配置して、変更が何かを確認してください。

+0

他のメッセージがフォームに送信されているように見えます - マウスクリックなど - これをチェックします。 – ChrisF

+1

チルトホイールメッセージは、Windows自体(AFAIK)ではなく、マウスドライバによって送信されるため、動作が異なる場合があります。 Spy ++でもすべての子ウィンドウを検索できます(ログオプション) – SLaks

+0

MessageDecoder.MsgToStringは.NET 3.5には存在しません。 – ChrisF

関連する問題