Как учитывать размер кадра при обработке WM_GETMINMAXINFO - PullRequest
4 голосов
/ 18 марта 2011

У меня есть приложение WPF, которое обрабатывает WM_GETMINMAXINFO, чтобы настроить хром окна и по-прежнему соблюдать системную панель задач.То есть, когда вы максимизируете окно на мониторе с панелью задач, оно не будет закрывать панель задач.Это работает хорошо, за исключением того, что рамка окна все еще видна при максимизации, что одновременно и уродливо, и бесполезно, потому что окно не может быть изменено, когда оно максимизируется.обработка WM_GETMINMAXINFO для увеличения размера окна выглядит следующим образом:

var monitorInfo = new SafeNativeMethods.MONITORINFO
    {
        cbSize = Marshal.SizeOf(typeof(SafeNativeMethods.MONITORINFO))
    };
SafeNativeMethods.GetMonitorInfo(monitor, ref monitorInfo);
var workArea = monitorInfo.rcWork;
var monitorArea = monitorInfo.rcMonitor;
minMaxInfo.ptMaxPosition.x = Math.Abs(workArea.left - monitorArea.left);
minMaxInfo.ptMaxPosition.y = Math.Abs(workArea.top - monitorArea.top);
minMaxInfo.ptMaxSize.x = Math.Abs(workArea.right - workArea.left);
minMaxInfo.ptMaxSize.y = Math.Abs(workArea.bottom - workArea.top);

// increase size to account for frame
minMaxInfo.ptMaxPosition.x -= 2;
minMaxInfo.ptMaxPosition.y -= 2;
minMaxInfo.ptMaxSize.x += 4;
minMaxInfo.ptMaxSize.y += 4;

Это на самом деле работает, но меня волнуют последние четыре строки, где я предполагаю, что ширина кадра составляет 2 пикселя.Есть ли более общий подход к получению ширины кадра, чтобы я мог разместить ее в моем WM_GETMINMAXINFO обработчике?

Спасибо

1 Ответ

3 голосов
/ 21 марта 2011

Sertac дал мне правильное направление, указав GetSystemMetrics Win32 API. Это напомнило мне класс WPF SystemParameters, в котором я нашел свойства FixedFrameHorizontalBorderHeight и FixedFrameVerticalBorderWidth. Это именно то, что мне было нужно:

// increase size to account for frame
minMaxInfo.ptMaxPosition.x -= (int)SystemParameters.FixedFrameVerticalBorderWidth;
minMaxInfo.ptMaxPosition.y -= (int)SystemParameters.FixedFrameHorizontalBorderHeight;
minMaxInfo.ptMaxSize.x += (int)(SystemParameters.FixedFrameVerticalBorderWidth * 2);
minMaxInfo.ptMaxSize.y += (int)(SystemParameters.FixedFrameHorizontalBorderHeight * 2);
...