我有两个运行在不同分辨率的显示器,左侧显示器是1920x1200,右侧显示器(主显示器)是1920x1080。
我想使用SetWindowPos让一个窗口占据左侧显示器的全部垂直高度。
以下是我的操作步骤:
我想使用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(因为这是目标显示器的垂直分辨率),但是在调用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正在分辨率和主/次监视器之间进行转换。
我准备按目标和主要监视器的高度比例扩展垂直尺寸。我相信这会起到作用,但似乎需要跳过许多障碍 - 我可能不知道确定“客户端坐标”屏幕尺寸的更好方法吗?