我有一个处理 WM_GETMINMAXINFO 的 WPF 应用程序,以便自定义窗口镶边并仍然尊重系统任务栏。也就是说,当您最大化带有任务栏的监视器上的窗口时,它不会覆盖任务栏。这很好用,除了窗口的框架在最大化时仍然可见,这既丑陋又无用,因为窗口在最大化时无法调整大小。
为了解决这个问题,我想我需要改变我的处理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
处理程序中容纳它?
谢谢