2011-06-13 9 views
7

WPF 윈도우에서 아무 곳이나 클릭하여 알려진 차이 (예 : 마우스 포인터)로 마우스 이벤트를 가져 와서 마우스 이벤트 (클릭, 마우스 또는 마우스 업)를 발생시키고 싶습니다. x, y에서 클릭하고 x + 100, y + 100에서 클릭 이벤트를 발생시킵니다.특정 좌표로 WPF/C#에서 마우스 이벤트를 발생시키는 방법은 무엇입니까?

근본적인 문제는 오버레이 터치 스크린에 비해 물리적으로 이동하는 디스플레이 모니터가 있다는 것입니다. 매 움직임마다 터치 스크린을 재조정하는 것보다는 click 이벤트에 변환 오프셋을 추가하고 싶습니다.

mouse_event 및 대체 기능 인 SendInput에 대한 Win32 API를 살펴 보았습니다. 나는 API에 익숙하지 않아서 길을 잃었다는 것을 인정한다.

분명히 이것은 간단한 문제이지만 해결할 수있는 곳으로 예제 코드를 찾을 수는 없습니다. 이 코드를 내 코드 뒤에 추가하는 방법에 대한 도움말, 포인터 또는 견본이 좋습니다.

감사 마크

+0

도움이 될 수 있습니다, WPF와 함께 작동하지 않습니다? –

답변

8

의 Win32 API는이 link 당신이 핸들러에서이 조정을 할 수 없습니다

// Copied the snippet of code from the link above, just to help future readers 
MouseEventArgs e = new MouseEventArgs(Mouse.PrimaryDevice, 0); 
e.RoutedEvent = Mouse.MouseEnterEvent; 

youUIElement.RaiseEvent(e); 
// Or 
InputManager.Current.ProcessInput(e); 
+0

고마워요, Waleed, 제 생각 엔이게 저를 길 아래로 조금 더 가깝게 만듭니다. 그러나 아직도 이해할 수없는 것은 번역을하는 방법입니다. 위의 스 니펫에서 이벤트 args에 e 번역 된 커서의 새 좌표를 어디에 지정해야합니까? 일단 좌표가 설정되면 새로운 좌표 (UI가 모호한 창 공간 일 수도 있음) 아래에있는 UI 요소를 모르기 때문에 ProcessInput (e)이이를 자동으로 파악합니까? 라우팅 전략을 터널링으로 설정해야합니까? –

+2

글쎄, 이벤트 Bubbling을 사용하여 자식 요소에 발생하는 모든 특정 이벤트를 잡아야합니다. 캡처 한 후에는 이벤트를 발생시킨 UIElement에 대한 참조를 얻습니다. 그런 다음 새 좌표를 지정하고 전달할 수 있습니다. 좌표가 클라이언트 영역 밖에 있는지 알아 보려면 다음과 같이 시도하십시오. if (this.Clip.Bounds.Bottom> newY || this.Clip.Bounds.Left> newX dont) 여기서 기본 창이 참조됩니다. – Waleed

관련 문제