C# und Mouse Erreignisse;)
-
Ich bins nochmal;)
Mit "Mouse.AddMouseMoveHandler(DependencyObject element, MouseeventHandler event);"
will ich die Mausbewegungungder meines Gesamten anwendung anmelden.. wie geht das???
2. Wie bekomm ich die Absoulten PixelKoordinaten eines Fensters bzw. GUI Controls in einer WPF anwendung raus?
-
NullBockException schrieb:
...
Such mal nach der Klasse "Mouse" (Namensraum habe ich gerade nicht zur Hand), dort Speziell Mouse.GetPosition(...) [Position der Maus im Verhältnis zum angegebenen Element], und ggf. Mouse.Capture & Co.
Ich schätze zumindest das dies tendenziell ein guter Einstieg für deine Fragen ist. Kenne die Klasse selbst aber nicht genau um dir die Fragen besser beantworten zu können, bin nur kürzlich im Buch "Programming WPF (Second Edition)" darüber gestolpert.
-
Zu 2. Ich suche sowas wie "GetWindowRect" der WinAPI für C# WPF..
-
Bringt mir alles nix:
mit
Mouse.AddMouseWheelHandler(Application.Current.MainWindow, new MouseWheelEventHandler(....));
kann ich mouse event der gesamten anwendung abfangen
So hätte ich geprüfe ob der curser über einem best. fesnter inst.. aber das geht nich!!
Mouse.DirectlyOver.Equals(MEINEFESTENRINSTANZ)
liegst vll. am Fenster "Viewport3D"?
-
Ich war mal so lieb und habe sowohl in dem genannten Buch sowie in die MSDN geschaut (Gerade weil ich mich an einen Textabschnitt aus dem Buch zu diesem Thema erinnere - da erst vor wenigen Tagen gelesen):
(System.Windows.Input)
Mouse.DirectlyOver
Bezieht sich eindeutig auf ein Element, nicht auf ein Unterelement (Sprich: Nur wenn die Maus EXAKT über diesen Element ist [und nicht über ein Unterelement] wirst du hiermit erfolg haben).
Mouse.IsMouseOver
Ist hierbei etwas hilfreicher, den es bezieht die Unterelemente mit einDavon abgesehen ist "hit testing" mit 3D ein extrem aufwendiger Prozess. Hierzu solltest du auch die Eigenschaft "IsHitTestVisible" betrachten. Diese sollte true sein, wenn du es benötigst, ansonsten false (Um die Rechenzeit zu senken).
Wenn du zu einem Viewport3D das Element suchst, worüber die Maus ist, zieht das wie gesagt die Performance runter (sollte man vor allem beachten, wenn komplexe Modelle verwendet werden). In dem genannten Buch sind hierzu auch Beispiele, aber ich werde diese jetzt aber nicht abtippen (Geht u.a. über das MouseMove-Event des Viewport3D und der VisualTree.HitTest Methode). Wenn du diese Beispiele benötigst, musst du mindestens bis morgen Abend warten [Und am besten über mein Profil eine Mail schicken].
-
Hi ASC, danke für deine Antwort...
die Moouse over events des Viewports werden nur dann gefeuert wenn sich der curser über eines der darin beinhaltende 3D Modelle befindet.. aber das will ich nicht. Hittesting mache ich dire über die ModelUIElement3D Objekt events.
Ich will lediglich wissen ob sich der curser in gesamten Viewport3D region also Rechteck des Fenster befindet!!!
-
NullBockException schrieb:
Ich will lediglich wissen ob sich der curser in gesamten Viewport3D region also Rechteck des Fenster befindet!!!
Dann müsste doch Mouse.IsMouseOver richtig sein (Wohlbemerkt nicht Mouse.DirectlyOver).
-
die Eigenschaft "Mouse.IsMouseOver" ist aber nich im Mouse namespace vorhanden? nur DirectlyOver??????
-
NullBockException schrieb:
die Eigenschaft "Mouse.IsMouseOver" ist aber nich im Mouse namespace vorhanden? nur DirectlyOver??????
Stimmt, gehört zum UIElement (UIElement::IsMouseOver).
Aber ich gehe mal davon aus das man durchaus selbst die Verweise in der MSDN verwenden kann (Steht als Verweis zum DirectlyOver), und sich auch die Eigenschaften der Klassen die man verwendet (Viewport3D hat eine Property IsMouseOver) anschaut.
-
Habe das gefühl hier führt KEIN weg nach ROM;)
ja mit der IsMouseOver Eigenscahft des Viewports, gehts auch nich! Bzw. die eigenscahft ist nur true, wenn ich über einem Visual3D bzw. UIElement im Viewport3D bin!!
Der Viewport3D hat ja auch OnMouseMove events etc. die würde ich ja direkt verwndetn, aber die springen halt nur an wenn ich über einem visuellen objekt im viewport mit der maus bin.. ich will einfach nur ein Mouse event wenn ich im Viewport fenster bin und gut ist.. ist das so ne hexerei bei WPF bzw. Viewport3D ??? Kann man keine flags setzen, damit auch maus events geschmissen werden wenn man sich nich direkt über einem objekt darin befindet?
-
Ok habe das problem jetzt so gelöst:
Ich habe meine 3D Enviroment Klasse nich von Viewport3D , sonder von Border abgeleute implementiert. Dann habe ich den Viewport3D als member bz. Child der Environment Klasse implementiert. Und da die Mouseerzeignisse abgefangen.. allerdings MUSS man einen Background im setzen damit die Mausereignisse über dem gesamten bereich, und nicht nur über die UI Elememte abgefangen werden.