2009-07-07 5 views
1

이 질문에 How to detect mouse wheel tilt 대답이 게시되고 필요한 코드를 보여줍니다.내 앱이 마우스 휠 틸트 메시지를받지 못하는 이유는 무엇입니까?

내 응용 프로그램의 기존 WndProc 메서드 (이 코드는 트랩해야하는 다른 메시지에서 작동 함)에서 구현했지만 작동하지 않습니다. 나는 체크했다. WndProc은 마우스 휠을 기울일 때 0x020E의 값을 가진 메시지를 전혀 보지 못했던 것으로 보인다.

.NET 3.5 SP1이 설치된 Windows XP SP3 (완전 패치)에서 Microsoft Wireless Laser 5000을 사용하고 있습니다.

내 Intellipoint 드라이버를 2009 년 5 월 8 일자 버전 7.0.258.0으로 업데이트했습니다.

다른 응용 프로그램 (예 : 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_EXITSIZEMOVEWM_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

내 응용 프로그램에 스크롤바에 여러 줄의 텍스트 상자를 추가 한 및 그 수신하고 마우스 휠 틸트 메시지에 작용. 그래서 할 필요는 대한 코드를 찾을 수있다; 슈퍼 유저에

This question이에 대한 몇 가지 베어링을 가질 수있다

UPDATE) - 내가 거기에 대답에 눈을하겠습니다.

+0

양식에 WndProc을 사용하고 있습니까? –

+0

@ 대니얼 - 예, 질문에 명확하게 설명 했어야합니다. – ChrisF

+0

@skaffman - 하드웨어 태그가 확실하지 않습니다. 마우스가 올바르게 작동하는지 99 % 확신합니다. 기울기를 처리하는 다른 응용 프로그램에 대한 내 노트를 참조하십시오. – ChrisF

답변

1

Spy ++를 사용하여 수신중인 메시지를 확인하십시오.

편집 : (!) 또한 방법은 이름를 얻을 수의 WndProc 당신을 m.ToString()를 호출 할 수 있습니다 당신이받은 메시지의. (이것은 거대한 switch 문에 의해 수행됩니다. Syetm.Windows.Forms.MessageDecoder.MsgToString)

메시지는 양식 자체가 아니라 포커스가있는 모든 컨트롤에 보내질 수 있습니다. 그럴 경우 message filter을 사용하고 싶을 수 있습니다.

또한 다른 마우스가 다른 마우스 휠 메시지를 보냅니다. Logitech 마우스 0x20EWParam 왼쪽 스크롤 음수 및 오른쪽 스크롤 긍정적 인 메시지를 보냅니다.(의견에 reponse에)


편집

수평 스크롤 수직 스크롤 후 긴 첨가하고 이전 버전의 프로그램에서 지원하지 않는 것을 기억하십시오. 따라서 마우스 드라이버는 수평 스크롤바를 찾고 스크롤 막대를 명시 적으로 스크롤 할 수 있습니다. 양식에 가로 스크롤 막대를 추가하여 사용자가 볼 수 없도록 음수로 배치하고 변경 사항이 있는지 확인하십시오.

+0

기타 메시지가 양식에 전송되는 것처럼 보입니다 - 마우스 클릭 등 - 그러나 이것을 확인해 보겠습니다. – ChrisF

+1

틸트 휠 메시지는 Windows 자체 (AFAIK)가 아닌 마우스 드라이버에서 전송되므로 다르게 작동 할 수 있습니다. Spy ++도 모든 하위 창을 검색 할 수 있습니다 (로깅 옵션) – SLaks

+0

MessageDecoder.MsgToString은 .NET 3.5에 존재하지 않습니다. – ChrisF