Функция PhysicalToLogicalPoint (winuser.h)
Преобразует физические координаты точки в окне в логические координаты.
Синтаксис
BOOL PhysicalToLogicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
Параметры
[in] hWnd
Тип: HWND
Дескриптор окна, преобразование которого используется для преобразования. Окна верхнего уровня полностью поддерживаются. В случае дочерних окон преобразуется только область перекрытия между родительским и дочерним окнами.
[in, out] lpPoint
Тип: LPPOINT
Указатель на структуру POINT , задающую преобразуемые физические координаты или координаты экрана. Новые логические координаты копируются в эту структуру при успешном выполнении функции.
Возвращаемое значение
None
Remarks
В Windows Vista представлена концепция физических координат. Диспетчер окон рабочих столов (DWM) масштабирует окна, не относящиеся к точкам на дюйм (dpi), если дисплей имеет высокое разрешение. Окно, видимые на экране, соответствуют физическим координатам. Приложение продолжает работать в логическом пространстве. Таким образом, представление окна приложения отличается от представления, которое отображается на экране. Для масштабируемых окон логические и физические координаты различаются.
Функция использует окно, определяемое параметром hWnd , и физические координаты, заданные в структуре POINT , для вычисления логических координат. Логические координаты — это немасштабированные координаты, которые отображаются для приложения программным способом. Другими словами, логические координаты — это координаты, распознаемые приложением, которые могут отличаться от физических координат. Затем API заменяет физические координаты логическими координатами. Новые координаты находятся в мировых координатах, происхождение которых (0, 0) на рабочем столе. Координаты, передаваемые в API, должны находиться в hWnd.
Исходные координаты находятся в единицах устройства.
На всех платформах PhysicalToLogicalPoint завершится сбоем в окне с шириной 0 или высотой; Сначала приложение должно установить ширину и высоту, отличные от 0, вызвав, например MoveWindow. В некоторых версиях Windows (включая Windows 7) PhysicalToLogicalPoint по-прежнему завершится сбоем, если метод MoveWindow был вызван после вызова ShowWindow с SH_HIDE скрыл окно.
В Windows 8 приложения с поддержкой системного DPI преобразуют физическое и логическое пространство с помощью PhysicalToLogicalPoint и LogicalToPhysicalPoint. В Windows 8.1 дополнительная виртуализация системы и межпроцессного взаимодействия означает, что для большинства приложений эти API не нужны. В результате в Windows 8.1, PhysicalToLogicalPoint и LogicalToPhysicalPoint больше не преобразуют точки. Система возвращает все точки приложения в собственном пространстве координат. Это поведение сохраняет функциональность для большинства приложений, но есть некоторые исключения, в которых необходимо внести изменения, чтобы убедиться, что приложение работает должным образом. В таких случаях используйте PhysicalToLogicalPointForPerMonitorDPI и LogicalToPhysicalPointForPerMonitorDPI.
Требования
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
Набор API | ext-ms-win-ntuser-window-l1-1-1 (представлено в Windows 8.1) |