当窗口样式为无并且窗口最大化以使窗口覆盖任务栏时,我遇到了问题。我从这里得到了一个解决方案(我从源代码中得到了代码,而不是他发布的),除了一个部分外,它运行良好。当您有两个监视器并且主监视器小于辅助监视器时,您可以最大化辅助监视器上的窗口,这会发生(注意窗口溢出到屏幕上):
这就是它的外观:(我刚刚将窗口大小调整为全屏。)
它在这里工作:
我正在做的是制作定制的镀铬物。所有的代码和一个示例项目都在这里上传。另外,如果有人有其他方法可以做到这一点,我将不胜感激。提前致谢!
编辑 这里是一些快速参考的代码:
private static void WmGetMinMaxInfo(System.IntPtr hwnd, System.IntPtr lParam)
{
MINMAXINFO mmi = (MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(MINMAXINFO));
// Adjust the maximized size and position to fit the work area of the correct monitor
int MONITOR_DEFAULTTONEAREST = 0x00000002;
System.IntPtr monitor = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST);
if (monitor != System.IntPtr.Zero)
{
MONITORINFO 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) - 8;
mmi.ptMaxSize.x = Math.Abs(rcWorkArea.right - rcWorkArea.left);
mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top) + 8;
if (rcWorkArea.bottom == rcMonitorArea.bottom)//full screen (no taskbar)
mmi.ptMaxSize.y--;//remove 1 px from the bottom for "Auto-hide taskbar" configuration
mmi.ptMinTrackSize.x = (int)currentlyChangingWindow.MinWidth;
mmi.ptMinTrackSize.y = (int)currentlyChangingWindow.MinHeight;
}
Marshal.StructureToPtr(mmi, lParam, true);
}
我没有编写此代码,所以我真的不知道这里发生了什么。这就是我在这里的原因。