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正在我的主显示器和辅助显示器的分辨率之间进行转换.
我正准备通过目标和主监视器的高度比率来扩大垂直维度.我敢肯定这是去工作,但似乎像很多篮球的有跳过 - 我我也许只是没有意识到确定"客户"的坐标屏幕尺寸的更好的办法?
问题不在于坐标变换。这是因为 Windows 不允许 SetWindowPos 调整窗口,因此它比屏幕大。当然,这是基于主显示器尺寸的。
归档时间: |
|
查看次数: |
1953 次 |
最近记录: |