【问题标题】:Windows API - Maximize a window across all monitorsWindows API - 在所有显示器上最大化一个窗口
【发布时间】:2025-06-07 14:35:02
【问题描述】:

我们有一个使用 RDP ActiveX 控件和 MFC 构建的自定义 RDP 客户端: https://docs.microsoft.com/en-us/windows/win32/termserv/using-remote-desktop-web-connection

为了支持多显示器,我们使用 put_UseMultimon 函数: https://docs.microsoft.com/en-us/windows/win32/termserv/imsrdpclientnonscriptable5-usemultimon

这种方法可行,但我们必须手动在显示器上拉伸窗口。最大化窗口将在其中一台监视器上最大化它。我们得到的体验不是很好,不能真正使用整个区域,并且窗口标题栏仍然存在(在一个屏幕上最大化窗口时它消失了)。

我们希望获得类似于 mstsc 的体验,其中最大化窗口会将其样式更改为最大化并使窗口跨越整个区域。有没有办法最大化一个窗口并使其跨越所有显示器?

【问题讨论】:

  • 如果你处理WM_GETMINMAXINFO,你就可以控制你的最大化尺寸和位置。不确定操作系统是否允许您重叠多个显示器,但可能值得一试。

标签: winapi activex monitor rdp maximize


【解决方案1】:

@JonathanPotter 是对的。

WM_GETMINMAXINFO发送到窗口时的大小或位置 窗口即将改变。应用程序可以使用此消息 覆盖窗口的默认最大化大小和位置。

以下是实现此目的的示例。 (注意:从主屏扩展到第二屏可以,否则不行。)

case WM_GETMINMAXINFO:
    MINMAXINFO* maxInfo = (MINMAXINFO*)lParam;
    maxInfo->ptMaxPosition.x = GetSystemMetrics(SM_XVIRTUALSCREEN);
    maxInfo->ptMaxPosition.y = GetSystemMetrics(SM_YVIRTUALSCREEN);
    maxInfo->ptMaxSize.x = GetSystemMetrics(SM_CXVIRTUALSCREEN);
    maxInfo->ptMaxSize.y = GetSystemMetrics(SM_CYVIRTUALSCREEN);
    return 0;

更多参考:“Multiple Monitor System Metrics”“GetSystemMetrics function”。

【讨论】:

  • 谢谢,我在一个单独的测试应用程序上试过这个,它可以工作。我会尝试将它与我们的客户集成。
最近更新 更多