Função PhysicalToLogicalPoint (winuser.h)

Converte as coordenadas físicas de um ponto em uma janela em coordenadas lógicas.

Sintaxe

BOOL PhysicalToLogicalPoint(
  [in]      HWND    hWnd,
  [in, out] LPPOINT lpPoint
);

Parâmetros

[in] hWnd

Digite: HWND

Um identificador para a janela cuja transformação é usada para a conversão. Há suporte total para janelas de nível superior. No caso de janelas filho, somente a área de sobreposição entre o pai e a janela filho é convertida.

[in, out] lpPoint

Tipo: LPPOINT

Um ponteiro para uma estrutura POINT que especifica as coordenadas físicas/de tela a serem convertidas. As novas coordenadas lógicas serão copiadas para essa estrutura se a função for bem-sucedida.

Valor retornado

Nenhum

Comentários

O Windows Vista apresenta o conceito de coordenadas físicas. O DWM (Gerenciador de Janelas da Área de Trabalho) dimensiona janelas sem reconhecimento de pontos por polegada (dpi) quando a exibição é dpi alta. A janela vista na tela corresponde às coordenadas físicas. O aplicativo continua a funcionar no espaço lógico. Portanto, a exibição da janela do aplicativo é diferente daquela exibida na tela. Para janelas dimensionadas, as coordenadas lógicas e físicas são diferentes.

A função usa a janela identificada pelo parâmetro hWnd e as coordenadas físicas fornecidas na estrutura POINT para calcular as coordenadas lógicas. As coordenadas lógicas são as coordenadas não dimensionadas que aparecem para o aplicativo de forma programática. Em outras palavras, as coordenadas lógicas são as coordenadas que o aplicativo reconhece, que podem ser diferentes das coordenadas físicas. Em seguida, a API substitui as coordenadas físicas pelas coordenadas lógicas. As novas coordenadas estão nas coordenadas do mundo cuja origem é (0, 0) na área de trabalho. As coordenadas passadas para a API precisam estar no hWnd.

As coordenadas de origem estão em unidades de dispositivo.

Em todas as plataformas, o PhysicalToLogicalPoint falhará em uma janela com largura ou altura de 0; um aplicativo deve primeiro estabelecer uma largura e uma altura diferentes de 0 chamando, por exemplo, MoveWindow. Em algumas versões do Windows (incluindo o Windows 7), o PhysicalToLogicalPoint ainda falhará se MoveWindow tiver sido chamado após uma chamada para ShowWindow com SH_HIDE ocultar a janela.

No Windows 8, aplicativos com reconhecimento de DPI do sistema são convertidos entre espaço físico e lógico usando PhysicalToLogicalPoint e LogicalToPhysicalPoint. Em Windows 8.1, a virtualização adicional do sistema e das comunicações entre processos significa que, para a maioria dos aplicativos, você não precisa dessas APIs. Como resultado, em Windows 8.1, PhysicalToLogicalPoint e LogicalToPhysicalPoint não transformam mais pontos. O sistema retorna todos os pontos para um aplicativo em seu próprio espaço de coordenadas. Esse comportamento preserva a funcionalidade para a maioria dos aplicativos, mas há algumas exceções em que você deve fazer alterações para garantir que o aplicativo funcione conforme o esperado. Nesses casos, use PhysicalToLogicalPointForPerMonitorDPI e LogicalToPhysicalPointForPerMonitorDPI.

Requisitos

   
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll
Conjunto de APIs ext-ms-win-ntuser-window-l1-1-1 (introduzido no Windows 8.1)