gpt4 book ai didi

winapi - SetWindowPos 和具有不同分辨率的多个显示器

转载 作者:行者123 更新时间:2023-12-04 21:16:13 42 4
gpt4 key购买 nike

我有两个以不同分辨率运行的显示器。左显示器为 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 正在我的主显示器和辅助显示器的分辨率之间进行转换。

我正准备通过目标和主显示器的高度比来增加垂直尺寸。我很确定这会起作用,但似乎必须跳过很多圈子 - 我是否可能只是不知道在“客户端坐标”中确定屏幕尺寸的更好方法?

最佳答案

问题不在于坐标变换。是窗口不允许 SetWindowPos 调整窗口使其大于屏幕。当然,这是基于主监视器的大小。

见:Can a window be resized past the screen size/offscreen?

关于winapi - SetWindowPos 和具有不同分辨率的多个显示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874211/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com