c++ - Win32 检测窗口是否最大化/停靠到半屏(Win 键 + 左/右)

标签 c++ winapi

我有一个经典的 Win32-API (C++) 应用程序,需要检测窗口是否停靠在屏幕的左半边/右半边。

问题的背景是窗口仅按网格步长调整大小,比方说 32 像素。在全屏模式下,程序会检测到该状态,允许大小与全屏匹配并填充多余的空间。对于 Windows 8 及更高版本,我想做同样的事情,而不是当前留下边框(因为尺寸会捕捉到 32 像素的倍数)。

最佳答案

使用 GetWindowPlacement() 函数,您可以使用 WINDOWPLACEMENT 的成员 rcNormalPosition 检索正常的窗口矩形。然后将普通矩形与实际窗口矩形进行比较。如果它们不匹配,则窗口很可能处于停靠状态。

例子:

bool IsDockedToMonitor(HWND hWnd)
{
    WINDOWPLACEMENT placement = {sizeof(WINDOWPLACEMENT)};
    GetWindowPlacement(hWnd, &placement);
    RECT rc;
    GetWindowRect(hWnd, &rc);

    return placement.showCmd == SW_SHOWNORMAL
        && (rc.left != placement.rcNormalPosition.left ||
            rc.top != placement.rcNormalPosition.top ||
            rc.right != placement.rcNormalPosition.right ||
            rc.bottom != placement.rcNormalPosition.bottom);
}

请注意,此解决方案并非 100% 可靠。正常矩形和当前窗口矩形匹配的可能性很小,即使窗口停靠在显示器的一侧也是如此。

关于c++ - Win32 检测窗口是否最大化/停靠到半屏(Win 键 + 左/右),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888651/

相关文章:

C++字符数组不显示地址

c++ - 错误 C2447 和预期的声明问题

c++ - 如何以编程方式模拟与控制台的交互?

java - 如何将键和鼠标事件发送到 Java 小程序?

c - Win32 : Toolbar dialog seems to never get focus and causes the main window to process slow?

c++ - 编译期间模板优化中的static_cast

c++从父类实例化 protected 成员

C++ 用重载的输出运算符替换 toString

winapi - GDI - 我可以在 DrawText 中使用新的 Windows 10 Segoe UI 表情符号彩色字体吗?

c - WIN32线程程序问题