SetWindowPos和具有不同分辨率的多个监视器

Kev*_*Day 5 winapi multiple-monitors

我有两台运行在不同分辨率的显示器.左侧监视器为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);
Run Code Online (Sandbox Code Playgroud)

我已经确认高度计算到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
Run Code Online (Sandbox Code Playgroud)

这很好(GetWindowRect文档说坐标将在客户端空间,我假设win32正在我的主显示器和辅助显示器的分辨率之间进行转换.

我正准备通过目标和主监视器的高度比率来扩大垂直维度.我敢肯定这是去工作,但似乎像很多篮球的有跳过 - 我我也许只是没有意识到确定"客户"的坐标屏幕尺寸的更好的办法?

Kev*_*Day 2

问题不在于坐标变换。这是因为 Windows 不允许 SetWindowPos 调整窗口,因此它比屏幕大。当然,这是基于主显示器尺寸的。

请参阅:窗口大小可以调整到超过屏幕大小/屏幕外吗?