Функция 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)