GetWindowRect имеет смещение в Windows 10
Я использую GetWindowRect в своей программе, чтобы получить координаты окна на рабочем столе. Это отлично работает на дюжине ПК, которые у меня есть для тестирования (XP-W8.1), но не на моем ПК W10 с сенсорным экраном: координаты смещены в верхний левый угол. Я погуглил и на ошибку в Windows 10, и на что-то, связанное с монитором, но ничего не могу найти, но это похоже на часто используемую функцию, и проблему легко воспроизвести.
У кого-нибудь есть какие-нибудь подсказки?
Код, упрощенный:
hwnd = FindWindow(NULL, windowname);
if (hwnd) {
TRect r;
GetWindowRect(hwnd, &r);
}
HWND hdt = GetDesktopWindow();
HDC dcdt = GetWindowDC(hdt);
// bitblt canvas to get window (won't work for high DPI setting)
1 ответ
Решение
Ваша программа не поддерживает DPI и поэтому подлежит виртуализации DPI. Это означает, что координаты, возвращаемые такими функциями, как GetWindowRect
будут виртуализированными координатами и поэтому не будут соответствовать истинным координатам экрана.