2011-06-13 9 views
7

Bir kullanıcının bir WPF penceresindeki herhangi bir yerini tıklatıp bilinen bir farklılık ile çevirisini alarak bir fare olayı (bir tıklama, konuşma veya fare işaretçisi) yükseltmek istiyorum, ör. x, y'ye tıklayın, tıklama olayını x + 100, y + 100'de kaldırın. Alttaki sorun, üst üste binen bir dokunmatik ekrana göre fiziksel olarak hareket eden bir ekran monitörünün olmasıdır. Dokunmatik ekranı her hareketle yeniden kalibre etmek yerine, çeviri ofsetini tıklama etkinliğine eklemek istiyorum.Belirli bir koordinatla WPF/C# içinde bir fare olayı nasıl yükseltebilirim?

Mouse_event ve superseding işlevi olan SendInput için Win32 API'sine baktım. API’yı çok bilmediğim için kayboldum.

Şüphesiz bu çözülmesi basit bir sorundur, ancak nerede bir çözüm uygulayabileceğimi gösteren bir örnek kod bulamıyorum. Bunu koduma nasıl ekleyeceğime dair herhangi bir yardım, işaretçi veya somut örnek takdir edilecektir.

Teşekkür Mark

+0

yardımcı olabilir, WPF ile çalışmaz? –

cevap

8

Win32 API bu link İşleyici bu ayarlamayı yapamaz

// 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

Teşekkür ederim, Waleed, bence bu beni yolun biraz aşağısında. Bununla birlikte, hala anlamadığım şey, çeviriyi nasıl yapacağım. Tercüme edilen imlecin yeni koordinatlarını, yukarıdaki kod parçasında e, olay arşivlerinde bulabilirsiniz. Koordinatlar ayarlandıktan sonra, yeni koordinatların altında olacak UI öğesini bilmediğimden (sadece boş pencere alanı olabilir), ProcessInput (e) bunu otomatik olarak çözüyor mu? Yönlendirme stratejisini Tünellemeye ayarlamalı mıyım yoksa başka bir şey mi yapmalıyım? –

+2

Eh, bir çocuk öğesinde yükseltilmiş her belirli olayı yakalamak için Olay Bubbling kullanmalısınız. Bir kez yakalandığında, etkinliği yükselten UIElement'e bir referans alırsınız, daha sonra yeni koordinatları belirtebilir ve yönlendirebilirsiniz. koordinatlar istemci alanı dışında olup olmadığını algılamak için, sadece deneyin: if (this.Clip.Bounds.Bottom> newY || this.Clip.Bounds.Left> newX dont) Burada ana pencereye başvuruyor – Waleed

İlgili konular