/// <summary> /// Creates an invisible Win32 caret for the specified Visual with the specified size (coordinates local to the owner visual). /// </summary> public static bool CreateCaret(Visual owner, Size size) { if (owner == null) throw new ArgumentNullException("owner"); HwndSource source = PresentationSource.FromVisual(owner) as HwndSource; if (source != null) { Vector r = owner.PointToScreen(new Point(size.Width, size.Height)) - owner.PointToScreen(new Point(0, 0)); return SafeNativeMethods.CreateCaret(source.Handle, IntPtr.Zero, (int)Math.Ceiling(r.X), (int)Math.Ceiling(r.Y)); } else { return false; } }
public static System.Windows.Point PointToScreenDpiAware(this SWM.Visual visual, System.Windows.Point point) { point = visual.PointToScreen(point); PresentationSource source = PresentationSource.FromVisual(visual); double scaleFactorX = source.CompositionTarget.TransformToDevice.M11; double scaleFactorY = source.CompositionTarget.TransformToDevice.M22; return(new System.Windows.Point(point.X / scaleFactorX, point.Y / scaleFactorY)); }
/// <summary> /// This will move the mouse cursor to a new location /// </summary> public static void SetMousePosition(Visual relativeTo, Point? offset = null) { Point point = offset ?? new Point(0, 0); Point screenPos = relativeTo.PointToScreen(point); SetMousePosition(screenPos); }
public static void ShowWindowMenu(HwndSource source, Visual element, Point elementPoint, Size elementSize) { if (elementPoint.X < 0.0 || elementPoint.X > elementSize.Width || (elementPoint.Y < 0.0 || elementPoint.Y > elementSize.Height)) return; Point screenPoint = element.PointToScreen(elementPoint); ShowWindowMenu(source, screenPoint, true); }
private static Point GetPixelSnappingOffset(Visual visual, Visual rootVisual) { var point = new Point(); if (rootVisual != null) { var transform = visual.TransformToAncestor(rootVisual) as Transform; if ((transform != null) && transform.Value.HasInverse) { point = visual.PointFromScreen(visual.PointToScreen(point)); } } return point; }
/// <summary> /// Converts point in control to screen point in default DPI. /// </summary> /// <param name="control">Parent control.</param> /// <param name="point">Current mouse position.</param> /// <returns>Point in default DPI.</returns> public Point ConvertRelativePointToScreenInDefaultDpi(Visual control, Point point) { Point screenPoint = control.PointToScreen(point); return GetScreenPointInDefaultDpi(screenPoint); }