我有一个经典的 Win32-API (C++) 应用程序,需要检测窗口是否停靠在屏幕的左/右半部分。
问题的背景是窗口的大小仅以网格为单位,假设为 32 像素。在全屏模式下,程序会检测到该状态,允许大小与全屏匹配并填充多余的空间。对于 Windows 8 及更高版本,我希望执行相同的操作,而不是当前保留边框(因为大小会对齐到 32 像素的倍数)。
具有功能GetWindowPlacement()
您可以使用成员检索正常的窗口矩形rcNormalPosition
of WINDOWPLACEMENT
。然后将正常矩形与实际窗口矩形进行比较。如果它们不匹配,则窗口很可能处于停靠状态。
Example:
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% 可靠。即使窗口停靠在显示器的一侧,正常矩形和当前窗口矩形匹配的可能性也很小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)