【发布时间】:2014-05-17 10:34:44
【问题描述】:
我有两台以不同分辨率运行的显示器。左显示器为 1920x1200。右显示器(主显示器)为 1920x1080。
我想使用 SetWindowPos 使窗口占据左侧监视器的整个垂直高度。
这是我的工作:
x = GetSystemMetrics(SM_XVIRTUALSCREEN);
hMonitor = monitorFromPoint(x, 0, MONITOR_DEFAULTTONEAREST);
MONITORINFO moninfo;
moninfo.cbSize = sizeof(MONITORINFO);
GetMonitorInfo(hMonitor, moninfo);
height = moninfo.rcWork.bottom - moninfo.rcWork.top;
SetWindowPos(hwnd, 0, moninfo.rcWork.left, moninfo.rcWord.top, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
我已确认高度计算为 1200(预期 b/c 是目标显示器的垂直分辨率)。
但是,在调用 SetWindowPos 之后,窗口矩形并没有填满屏幕的整个高度(实际上是 1080 高)。
我什至在 VBA 中尝试过这个只是为了咯咯笑:
Public Sub testSWP()
Dim hwnd As Long
hwnd = &H1D2F2C
SetWindowPos &H1D2F2C, 0, -1900, 0, 150, 1200, SWP_NOZORDER Or SWP_NOACTIVATE
Dim r As RECT
GetWindowRect hwnd, r
' at this point, r.bottom = 1080
End Sub
这很好(GetWindowRect 文档说坐标将在客户端空间中,我假设 win32 正在我的主显示器和辅助显示器的分辨率之间进行转换。
我正准备按目标和主显示器的高度比来增加垂直尺寸。我很确定这会奏效,但似乎需要跳过很多障碍 - 我可能只是不知道在“客户端坐标”中确定屏幕尺寸的更好方法吗?
【问题讨论】:
-
如果您已经解决了问题,您应该删除您的问题或发布自我回答。在标题中添加“已解决”并不是 SO 的工作方式。 (有关详细信息,请参阅 [帮助/自我回答]。)