Esempio n. 1
0
        /// <summary>
        /// Get window border size
        /// </summary>
        private void GetBorder()
        {
            NativeMethods.DwmGetWindowAttribute(Handle, DWMWINDOWATTRIBUTE.ExtendedFrameBounds, out NativeStructs.Rect frame, Marshal.SizeOf(typeof(NativeStructs.Rect)));

            Border = new NativeStructs.Rect(
                (int)(Math.Floor(frame.Left / DpiX) - Rect.Left),
                (int)(Math.Floor(frame.Top / DpiY) - Rect.Top),
                (int)(Rect.Right - Math.Ceiling(frame.Right / DpiX)),
                (int)(Rect.Bottom - Math.Ceiling(frame.Bottom / DpiY))
                );
        }
Esempio n. 2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="windowInfo">Selected window</param>
        /// <param name="selectedRegion">Selected region</param>
        public SelectedWindow(WindowInfo windowInfo, NativeStructs.Rect selectedRegion)
        {
            WindowInfo = windowInfo;

            selectedRegion = new NativeStructs.Rect(
                (int)(selectedRegion.Left * ScaleHelper.ScalingFactor),
                (int)(selectedRegion.Top * ScaleHelper.ScalingFactor),
                (int)(selectedRegion.Right * ScaleHelper.ScalingFactor),
                (int)(selectedRegion.Bottom * ScaleHelper.ScalingFactor)
                );

            SelectedRegion = new NativeStructs.Rect(
                selectedRegion.Left + WindowInfo.Border.Left,
                selectedRegion.Top + WindowInfo.Border.Top,
                selectedRegion.Right + WindowInfo.Border.Left,
                selectedRegion.Bottom + WindowInfo.Border.Top
                );
        }
Esempio n. 3
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="windowInfo">Selected window</param>
        /// <param name="selectedRegion">Selected region</param>
        public SelectedWindow(WindowInfo windowInfo, NativeStructs.Rect selectedRegion)
        {
            WindowInfo = windowInfo;

            selectedRegion = new NativeStructs.Rect(
                (int)(selectedRegion.Left * windowInfo.DpiX),
                (int)(selectedRegion.Top * windowInfo.DpiY),
                (int)(selectedRegion.Right * windowInfo.DpiX),
                (int)(selectedRegion.Bottom * windowInfo.DpiY)
                );

            SelectedRegion = new NativeStructs.Rect(
                selectedRegion.Left + WindowInfo.Border.Left,
                selectedRegion.Top + WindowInfo.Border.Top,
                selectedRegion.Right + WindowInfo.Border.Left,
                selectedRegion.Bottom + WindowInfo.Border.Top
                );
        }
Esempio n. 4
0
        private static void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam)
        {
            MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));

            IntPtr hMonitor = MonitorFromWindowNative(hwnd, NativeFlags.MONITOR_DEFAULTTONEAREST);

            MonitorInfoEx info = new MonitorInfoEx();

            GetMonitorInfoNative(new HandleRef(null, hMonitor), info);

            NativeStructs.Rect rcWorkArea    = info.rcWork;
            NativeStructs.Rect rcMonitorArea = info.rcMonitor;

            mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.left - rcMonitorArea.left);
            mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top);
            mmi.ptMaxSize.x     = Math.Abs(rcWorkArea.right - rcWorkArea.left);
            mmi.ptMaxSize.y     = Math.Abs(rcWorkArea.bottom - rcWorkArea.top);

            Marshal.StructureToPtr(mmi, lParam, true);
        }
Esempio n. 5
0
        /// <summary>
        /// Get window size and position
        /// </summary>
        private void GetSizeAndPosition()
        {
            if (!NativeMethods.GetWindowRect(Handle, out var rct))
            {
                return;
            }

            //DpiHelper.GetDpi(Handle, out var dpiX, out var dpiY);
            DpiHelper.GetPrimaryDpi(out var dpiPrimaryX, out var dpiPrimaryY);

            var temprct = new NativeStructs.Rect(
                (int)(rct.Left / DpiX),
                (int)(rct.Top / DpiY),
                (int)(rct.Right / DpiX),
                (int)(rct.Bottom / DpiY)
                );

            Rect     = temprct;
            Position = new Point((int)(rct.Left / dpiPrimaryX), (int)(rct.Top / dpiPrimaryY));
            Size     = new Size(temprct.Right - temprct.Left + 1, temprct.Bottom - temprct.Top + 1);
        }