Windows 窗口的大小是否可以超过屏幕大小/屏幕外?

Windows 窗口的大小是否可以超过屏幕大小/屏幕外?,windows,winapi,window,size,max,Windows,Winapi,Window,Size,Max,我的目的是在Win32下通过编程将窗口的宽度/高度调整为大于物理屏幕大小。我该怎么做 在我的系统上,给定窗口的最大大小似乎受到屏幕大小的限制,无论是通过编程还是通过拖动大小光标手动调整大小 我已经用SetWindowPos()和MoveWindow()以编程方式尝试过了,它们都限制了目标窗口的大小。奇怪的是,我知道有些人没有这个“cap”,所以我想知道这是否是由于某些操作系统设置(注册表)造成的。有人知道这件事吗?或者是某种解决方法 //编辑:新发展 我正在WindowsXP和Windows7上

我的目的是在Win32下通过编程将窗口的宽度/高度调整为大于物理屏幕大小。我该怎么做

在我的系统上,给定窗口的最大大小似乎受到屏幕大小的限制,无论是通过编程还是通过拖动大小光标手动调整大小

我已经用SetWindowPos()和MoveWindow()以编程方式尝试过了,它们都限制了目标窗口的大小。奇怪的是,我知道有些人没有这个“cap”,所以我想知道这是否是由于某些操作系统设置(注册表)造成的。有人知道这件事吗?或者是某种解决方法

//编辑:新发展


我正在WindowsXP和Windows7上测试。我使用的图形卡是NVIDIA Quadro NVS 290(256MB)和Geforce 9800GT(1GB)。经过进一步调查,Windows似乎正在拦截消息并篡改参数。例如,如果您调用SetWindowPos使目标为2000x2000,它将只接收限制x/y的WM_大小。

是,窗口可以大于屏幕(甚至是所有监视器的总和)。窗口也可以放置在屏幕外(有些应用程序在保持活动状态的同时隐藏窗口)

也许Windows7桌面管理器正在启动,并试图为您将这些窗口“停靠”到屏幕边缘


您可以尝试使用稍微低一点的API
SetWindowPos
,它可以控制通知、z顺序和其他内容。

为WM_GETMINMAXINFO实现一个消息处理程序,以阻止Windows应用sane默认行为:

case WM_GETMINMAXINFO: {
    DefWindowProc(hWnd, message, wParam, lParam);
    MINMAXINFO* pmmi = (MINMAXINFO*)lParam;
    pmmi->ptMaxTrackSize.x = 2000;
    pmmi->ptMaxTrackSize.y = 2000;
    return 0;
}

框架较厚的窗口(允许用户调整大小)的大小不得超过桌面

请尝试清除THICKFRAME(0x40000)标志

下面应该允许编程调整大小,但用户将失去调整大小的能力。如果在调整大小后重新添加Thickframe,用户可以调整大小,但当用户这样做时,窗口将立即缩小到桌面限制的大小

以下是一些csharp代码,该代码还删除了所有边框、标题等:

WS-style=(WS)GetWindowLong(ptr,GWL_样式); style=style&~WS.BORDER&~WS.ThickFrame&~WS.SYSMENU&~WS.CAPTION | WS.POPUP; SetWindowLong(ptr、GWL_样式,(int)样式)


uuSpy是一个很好的窗口设置工具。
它类似于Microsoft Spy++,但允许您修改THICKFRAME等设置。

使用“Infinte screen”软件,您可以获得比屏幕分辨率更大(甚至更大)的窗口:

以下是如何使用它:

  • 下载它,运行它

  • 在“超大尺寸”选项卡中,选择要放大的窗口

  • 给它你想要的宽度和高度。完成

  • 以防万一,你需要一个大屏幕截图(这就是我在这里结束的原因):
    如果你想获得窗口的屏幕截图,你在同一个超大选项卡中有一个屏幕截图选项。(因为屏幕截图通常不大于屏幕大小,即使窗口更大)。另一个(更好)屏幕截图窗口的方法是使用Greenshot,因为您可以将它们保存在.tiff中,并直接观察窗口。

    因此,经过进一步调查,我认为这可能与图形卡驱动程序有关。例如,在某些系统上,您可以将窗口的大小设置为大于屏幕的物理大小。如果您执行同样的代码,它只会将其放大到一定的大小。奇怪的是,有些人能够使他们的窗口比屏幕大,而有些人却不能。这就是我试图解决的问题。我想以编程方式来解决。如果以编程方式移动窗口,Aero Snap不会接管。它必须由用户启用,而不是由用户移动他打开窗户。