可以调整窗口大小超过屏幕大小/屏幕外?

我的目的是在Win32下以编程方式调整窗口的宽度/高度,使其大于物理屏幕的大小。 我怎样才能做到这一点?

在我的系统上,似乎给定的窗口的最大尺寸是由我的屏幕的大小,无论是编程或通过拖动大小的光标手动resize。

我已经用SetWindowPos()和MoveWindow()以编程方式尝试并同时覆盖目标窗口的大小。 奇怪的是,我知道有些人没有这个“帽子”,所以我想知道这是否可能是由于一些操作系统设置(registry)。 有没有人知道这件事? 或者,也许有一种方法来解决它?

//编辑:新的发展

我正在testingWindows XP和Windows 7.我使用的显卡是NVIDIA Quadro NVS 290(256MB)和Geforce 9800GT(1GB)。 经过进一步的调查,它看起来像Windows正在截取消息和摆弄参数。 例如,如果您调用SetWindowPos来创build一个目标2000×2000,那么它只会收到一个WM_SIZE,用于上限的x / y。

实现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; } 

带有厚框架的Windows(以允许用户调整大小)受限于桌面的增长。

尝试SetWindowLong()清除THICKFRAME(0x40000)标志。

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

以下是从一些csharp代码,也删除所有边界,标题等:

WS style =(WS)GetWindowLong(ptr,GWL_STYLE); style = style&〜WS.BORDER&〜WS.ThickFrame&〜WS.SYSMENU&〜WS.CAPTION | WS.POPUP; SetWindowLong(ptr,GWL_STYLE,(int)style);


使用窗口设置的好工具是uuSpy。 这就像微软Spy ++,但允许你修改像THICKFRAME这样的设置。

是的,窗口可以大于屏幕(甚至是所有显示器的总和)。 Windows也可以定位在屏幕外(某些应用程序在保持活动状态下可以隐藏)。

也许Windows 7桌面管理器正在踢,并试图将这些窗口“停靠”到你的屏幕边缘。

你可以尝试使用稍低级别的API SetWindowPos ,它可以控制通知,z顺序和其他东西。

您可以使用“Infinte Screen”软件获得一个窗口,其分辨率(甚至更大)比屏幕更大:http: //ynea.futureware.at/cgi-bin/infinite_screen.pl

以下是如何使用它:

  1. 下载它,运行它。

  2. 在“超大”选项卡中,选择要放大的窗口。

  3. 给它你想要的宽度和高度。 完成!

以防万一你需要一个大的屏幕截图(这就是我最后的结果):如果你想得到一个窗口的截图,你可以在同一个Oversize选项卡中获得一个屏幕截图选项。 (因为屏幕截图通常不会大于屏幕尺寸,即使窗口较大)。 另一个更好的方法是使用Greenshot,你可以将它们保存在.tiff中,然后直接观看窗口。

使用modWindow 。 我刚刚发现它,这似乎正是需要这个。