예제 #1
0
파일: Interop.cs 프로젝트: Wires77/Elpis
 internal static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);
예제 #2
0
파일: Interop.cs 프로젝트: Wires77/Elpis
        public void WmGetMinMaxInfo(IntPtr hwnd, IntPtr lParam)
        {
            var mmi = (MINMAXINFO) Marshal.PtrToStructure(lParam, typeof (MINMAXINFO));

            // Adjust the maximized size and position to fit the work area of the correct monitor
            const int MONITOR_DEFAULTTONEAREST = 0x00000002;
            IntPtr monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);

            if (monitor != IntPtr.Zero)
            {
                if (!_max_minSet)
                {
                    _maxTrack = mmi.ptMaxTrackSize;
                    _minTrack = mmi.ptMinTrackSize;
                }

                var monitorInfo = new MONITORINFO();
                GetMonitorInfo(monitor, monitorInfo);
                RECT rcWorkArea = monitorInfo.rcWork;
                RECT rcMonitorArea = monitorInfo.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);

                if (_window != null)
                {
                    if (_window.WindowState == WindowState.Maximized)
                    {
                        mmi.ptMaxTrackSize = _maxTrack;
                        mmi.ptMinTrackSize = _minTrack;
                    }
                    else
                    {
                        // Bug Fix #13: Translate WPF scaled coordinates to screen coordinates.
                        var windowMaxDimens = WpfToScreenPixels(new Point(_window.MaxWidth, _window.MaxHeight));
                        var windowMinDimens = WpfToScreenPixels(new Point(_window.MinWidth, _window.MinHeight));

                        mmi.ptMaxTrackSize.x = (int) windowMaxDimens.X;
                        mmi.ptMaxTrackSize.y = (int) windowMaxDimens.Y;
                        mmi.ptMinTrackSize.x = (int) windowMinDimens.X;
                        mmi.ptMinTrackSize.y = (int) windowMinDimens.Y;
                    }
                }
            }

            Marshal.StructureToPtr(mmi, lParam, true);
        }