是否可以通过屏幕尺寸/屏幕外调整窗口大小?

时间:2011-05-25 11:01:49

标签: windows winapi window size max

我的目的是在Win32下以编程方式将窗口的大小/高度调整为大于物理屏幕的大小。我怎么能这样做?

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

我已尝试使用SetWindowPos()和MoveWindow()进行编程,并且都限制了目标窗口的大小。奇怪的是我知道有些人没有这个'上限',所以我想知道这是否可能是由于某些操作系统设置(注册表)。有谁知道这件事?或者也许某种方法来解决它?

//编辑:新发展

我正在Windows XP和Windows 7上进行测试。我使用的显卡是NVIDIA Quadro NVS 290(256MB)和Geforce 9800GT(1GB)。经过进一步调查后,看起来Windows正在拦截消息并摆弄参数。例如,如果你调用SetWindowPos来制作一个目标2000x2000,它只会收到上限x / y的WM_SIZE。

4 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:3)

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

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

以下内容应允许编程大小调整,但用户将无法调整大小。如果在调整大小后再添加Thickframe,则用户可以调整大小,但是当他这样做时,窗口将立即缩小回桌面有限的大小。

以下是一些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。 它就像Microsoft Spy ++,但允许您修改像THICKFRAME这样的设置。

答案 2 :(得分:0)

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

也许Windows 7桌面管理器正在开始尝试将这些窗口“停靠”到屏幕边缘。

您可以尝试使用稍低级别的API SetWindowPos,它可让您控制通知,z顺序和其他内容。

答案 3 :(得分:-1)

使用' Infinte Screen"您可以获得比屏幕更大的分辨率(甚至更大)的窗口。软件: http://ynea.futureware.at/cgi-bin/infinite_screen.pl

以下是如何使用它:

  1. 下载,运行它。

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

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

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