Hardcodet.Wpf.TaskbarNotification.TaskbarIcon.GetDeviceCoordinates C# (CSharp) Method

GetDeviceCoordinates() private method

Recalculates OS coordinates in order to support WPFs coordinate system if OS scaling (DPIs) is not 100%.
private GetDeviceCoordinates ( Point point ) : Point
point Hardcodet.Wpf.TaskbarNotification.Interop.Point
return Hardcodet.Wpf.TaskbarNotification.Interop.Point
        private Point GetDeviceCoordinates(Point point)
        {
            if (double.IsNaN(scalingFactor))
            {
                //calculate scaling factor in order to support non-standard DPIs
                var presentationSource = PresentationSource.FromVisual(this);
                if (presentationSource == null)
                {
                    scalingFactor = 1;
                }
                else
                {
                    var transform = presentationSource.CompositionTarget.TransformToDevice;
                    scalingFactor = 1 / transform.M11;
                }
            }

            //on standard DPI settings, just return the point
            if (scalingFactor == 1.0) return point;

            return new Point() { X = (int)(point.X * scalingFactor), Y = (int)(point.Y * scalingFactor) };
        }

Usage Example

Ejemplo n.º 1
0
        public static Interop.Point GetMousePosition(TaskbarIcon icon)
        {
            Interop.Point cursorPosition = new Interop.Point();
            if (icon.MessageSink.Version == NotifyIconVersion.Vista)
            {
                //physical cursor position is supported for Vista and above
                WinApi.GetPhysicalCursorPos(ref cursorPosition);
            }
            else
            {
                WinApi.GetCursorPos(ref cursorPosition);
            }

            return(icon.GetDeviceCoordinates(cursorPosition));
        }