Функция LogicalToPhysicalPoint (winuser.h)
Преобразует логические координаты точки в окне в физические.
Синтаксис
BOOL LogicalToPhysicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
Параметры
[in] hWnd
Тип: HWND
Дескриптор окна, преобразование которого используется для преобразования. Окна верхнего уровня полностью поддерживаются. В случае дочерних окон преобразуется только область перекрытия между родительским и дочерним окнами.
[in, out] lpPoint
Тип: LPPOINT
Указатель на структуру POINT , указывающую логические координаты для преобразования. Новые физические координаты копируются в эту структуру при успешном выполнении функции.
Возвращаемое значение
None
Remarks
В Windows Vista представлена концепция физических координат. Диспетчер окон рабочего стола (DWM) масштабирует окна без точек на дюйм (точек на дюйм), если дисплей имеет высокий уровень точек на дюйм. Окно, видимые на экране, соответствуют физическим координатам. Приложение продолжает работать в логическом пространстве. Таким образом, представление окна приложения отличается от того, которое отображается на экране. Для масштабируемых окон логические и физические координаты различаются.
LogicalToPhysicalPoint — это API преобразования, который может вызываться процессом, объявляющим себя как поддерживающий dpi. Функция использует окно, определенное параметром hWnd , и логические координаты, заданные в структуре POINT , для вычисления физических координат.
Функция LogicalToPhysicalPoint заменяет логические координаты в структуре POINT физическими координатами. Физические координаты находятся относительно левого верхнего угла экрана. Координаты должны находиться внутри клиентской области hWnd.
На всех платформах LogicalToPhysicalPoint завершится сбоем в окне с шириной 0 или высотой; сначала приложение должно установить ширину и высоту, отличные от 0, путем вызова, например MoveWindow. В некоторых версиях Windows (включая Windows 7) LogicalToPhysicalPoint по-прежнему завершается сбоем, если метод 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) |