PhysicalToLogicalPoint 함수(winuser.h)
창에 있는 점의 실제 좌표를 논리 좌표로 변환합니다.
구문
BOOL PhysicalToLogicalPoint(
[in] HWND hWnd,
[in, out] LPPOINT lpPoint
);
매개 변수
[in] hWnd
형식: HWND
변환에 변환이 사용되는 창에 대한 핸들입니다. 최상위 창은 완전히 지원됩니다. 자식 창의 경우 부모 창과 자식 창 간에 겹치는 영역만 변환됩니다.
[in, out] lpPoint
형식: LPPOINT
변환할 물리적/화면 좌표를 지정하는 POINT 구조체에 대한 포인터입니다. 함수가 성공하면 새 논리 좌표가 이 구조체로 복사됩니다.
반환 값
없음
설명
Windows Vista는 물리적 좌표의 개념을 소개합니다. DWM(데스크톱 창 관리자)은 디스플레이가 높은 dpi일 때 dpi(인치당 비도트) 인식 창의 크기를 조정합니다. 화면에 표시되는 창은 실제 좌표에 해당합니다. 애플리케이션은 논리 공간에서 계속 작동합니다. 따라서 응용 프로그램의 창 보기는 화면에 표시되는 것과 다릅니다. 크기가 조정된 창의 경우 논리 좌표와 물리적 좌표가 다릅니다.
함수는 hWnd 매개 변수로 식별된 창과 POINT 구조에 지정된 물리적 좌표를 사용하여 논리 좌표를 계산합니다. 논리 좌표는 프로그래밍 방식으로 애플리케이션에 표시되는 크기가 조정되지 않은 좌표입니다. 즉, 논리 좌표는 애플리케이션이 인식하는 좌표이며 물리적 좌표와 다를 수 있습니다. 그런 다음 API는 물리적 좌표를 논리 좌표로 바꿉니다. 새 좌표는 바탕 화면에서 원점이 (0, 0)인 세계 좌표에 있습니다. API에 전달된 좌표는 hWnd에 있어야 합니다.
원본 좌표는 디바이스 단위에 있습니다.
모든 플랫폼에서 PhysicalToLogicalPoint 는 너비 또는 높이가 0인 창에서 실패합니다. 애플리케이션은 먼저 MoveWindow와 같이 를 호출하여 0이 아닌 너비와 높이를 설정해야 합니다. 일부 Windows 버전(Windows 7 포함)에서는 SH_HIDE 함께 ShowWindow를 호출한 후 MoveWindow가 호출된 경우에도 PhysicalToLogicalPoint가 실패합니다.
Windows 8에서 시스템 DPI 인식 애플리케이션은 PhysicalToLogicalPoint 및 LogicalToPhysicalPoint를 사용하여 물리적 공간과 논리 공간 간에 변환됩니다. Windows 8.1 시스템 및 프로세스 간 통신의 추가 가상화는 대부분의 애플리케이션에서 이러한 API가 필요하지 않다는 것을 의미합니다. 따라서 Windows 8.1 PhysicalToLogicalPoint 및 LogicalToPhysicalPoint는 더 이상 지점을 변환하지 않습니다. 시스템은 자체 좌표 공간의 애플리케이션에 대한 모든 지점을 반환합니다. 이 동작은 대부분의 애플리케이션에 대한 기능을 유지하지만 애플리케이션이 예상대로 작동하는지 확인하기 위해 변경해야 하는 몇 가지 예외가 있습니다. 이러한 경우 PhysicalToLogicalPointForPerMonitorDPI 및 LogicalToPhysicalPointForPerMonitorDPI를 사용합니다.
요구 사항
지원되는 최소 클라이언트 | Windows Vista [데스크톱 앱만 해당] |
지원되는 최소 서버 | Windows Server 2008 [데스크톱 앱만 해당] |
대상 플랫폼 | Windows |
헤더 | winuser.h(Windows.h 포함) |
라이브러리 | User32.lib |
DLL | User32.dll |
API 세트 | ext-ms-win-ntuser-window-l1-1-1(Windows 8.1 소개) |