MouseMove
이벤트를 처리하여 두 개의 NumericUpDowns
을 현재 마우스 좌표로 업데이트하는 사용자 지정 컨트롤이 있습니다.WinForms의 "Ghost"MouseMove 이벤트
그러나 이상한 경우에는 MouseMove
이벤트가 발생하지 않아도됩니다 (무선 마우스를 끄고 트랙 패드를 비활성화 함). 따라서 마우스가 움직이지 않아도 MouseMove
이 발생합니다.
간단한 점검을하고 "고스트"MouseMove
이벤트 사이에서 마우스 포인터의 위치가 변경되지 않았 음을 확인했습니다. 필자는이 점을 이용하여 포인터를 실제로 움직였을 때만 이벤트를 처리하는 메서드가 호출되도록하여 응용 프로그램의 요구 사항을 충족시킬 수 있었는지 확인했습니다.
그러나 모든 마우스/트랙 패드가 비활성화되었을 때 MouseMove 이벤트를 실행할 수있는 것이 무엇인지 이해하지 못하기 때문에 여전히 의문입니다. Visual Studio에서 호출 스택을 보면 마우스가 실제로 움직이는 것처럼 응용 프로그램의 다른 부분 (예 : 응용 프로그램의 일부를 시뮬레이트하는 것처럼) 에서처럼 MouseMove
이벤트의 실행이 "정품"이라고 생각됩니다. MouseMove
).
이유에 대한 의견이 있으면 알려주세요. 고맙습니다!
EDIT : King King의 제안에 따라 MouseMove
에 대한 메시지가 감지 될 때마다 문자열을 인쇄하도록 코드를 수정했습니다. 마우스가 꺼져 있고 포인터가 컨트롤을 가리키면 Alt-Tab을 사용하여 응용 프로그램간에 전환 할 때 문자열이 인쇄됩니다. 아마도 이것은 다시 그려지는 응용 프로그램과 관련이 있습니까?
실제 MouseMove가 있는지 확인하려면 'WndProc'을 재정의하고이 코드를 추가하십시오. if (m.Msg == 0x200) System.Diagnostics.Debug.Print ("Mouse MOVE !!!!!!! !!! ");', 나는'Mouse MOVE !!!!! ... '가 인쇄되지 않을 것이라고 생각한다. –
제안에 감사드립니다. 불행히도 "Mouse MOVE !!!!!" 인쇄됩니다. 아무 것도하지 않으면 아무 것도 인쇄되지 않습니다. 그러나 Alt-Tab (Windows 7)을 사용하여 응용 프로그램간에 전환 할 때 "Mouse MOVE !!!!!" 몇 번 인쇄됩니다. 마우스를 가리키면 컨트롤을 가리키고있을 때에 만 나타납니다. 어떤 이유에서 창이 다시 그려지는 것이 원인 일 수 있습니까? – elnigno
두 가지 아이디어 : [A] 터치 스크린 장비가 있습니까? 윈도우 7에서 마우스 움직임으로보고되고 때로는 필터링해야합니다. [B]는 화면 좌표 또는 앱 협동 조합에 연결된 업다운입니다. 아마 그렇지는 않지만 어쩌면 앱 협동 조합의 공동 변경이 효과가있을 것인가? – n4m16