首页 > 解决方案 > 具有不同缩放监视器的 SetWindowPos 将位置设置为错误的位置

问题描述

我有 2 台具有不同分辨率和缩放比例的显示器:

  1. 2560 * 1440 缩放 x1(主要)

  2. 1920 * 1200 缩放 x1.5(从主 [2][1] 向左对齐到顶部)

我的应用程序正在更改另一个应用程序窗口的位置。我尝试设置位置的窗口尺寸为 300x200。我将窗口位置设置为 (-150|200) 并在下一行检查位置:

::SetWindowPos(this->handle, 0, lLeft, lTop, 0,0, SWP_NOREPOSITION | SWP_NOSIZE);
// output lLeft, lTop
RECT r = { 0 };
::GetWindowRect(this->handle, &r);
// output r.left, r.top

我有以下输出:

<< -150  200 // SetWindowPos
>> -740  133 // GetWindowRect

定位后,窗口的缩放比例为 1(从主窗口),而位于辅助窗口,应该缩放 1.5

它错位了窗口x = [-150 ... 0]

当窗口部分在辅助监视器上并且窗口的中间点已经在主监视器上时,看起来会发生这种情况。

我能做些什么来避免这种行为吗?

标签: c++windowssetwindowpos

解决方案


推荐阅读