SetWindowPos с различными мониторами масштабирования устанавливает положение в неправильном месте - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть 2 монитора с разным разрешением и масштабированием:

  1. 2560 * 1440 масштабирования x1 (основной)

  2. 1920 * 1200 масштабирования x1.5 (слева от основного [2] [1] выровнено по верху)

Мое приложение меняет положение окна другого приложения.Окно, в котором я пытаюсь установить местоположение, имеет размеры 300х200.Я устанавливаю местоположение окна в (-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]

Похоже, это происходит, когда окно частично находится на дополнительном мониторе исредняя точка окна уже на основном мониторе.

Могу ли я что-нибудь сделать, чтобы избежать такого поведения?

...