Compartilhar via


Função LogicalToPhysicalPointForPerMonitorDPI (winuser.h)

Converte um ponto em uma janela de coordenadas lógicas em coordenadas físicas, independentemente do reconhecimento de pontos por polegada (dpi) do chamador. Para obter mais informações sobre os níveis de reconhecimento de DPI, consulte PROCESS_DPI_AWARENESS.

Sintaxe

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

Parâmetros

[in] hWnd

Um identificador para a janela cuja transformação é usada para a conversão.

[in, out] lpPoint

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

Retornar valor

Retornará TRUE se tiver êxito ou FALSE caso contrário.

Comentários

Em Windows 8, aplicativos com reconhecimento de DPI do sistema traduzidos 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, essas APIs 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.

Por exemplo, um aplicativo pode precisar percorrer toda a árvore de janelas de outro processo e solicitar ao sistema informações dependentes de DPI sobre a janela. Por padrão, o sistema retornará as informações com base no reconhecimento de DPI do chamador. Isso é ideal para a maioria dos aplicativos. No entanto, o chamador pode precisar das informações com base no reconhecimento de DPI do aplicativo associado à janela. Isso pode ser necessário porque os dois aplicativos enviam informações dependentes de DPI entre si diretamente. Nesse caso, o aplicativo pode usar LogicalToPhysicalPointForPerMonitorDPI para obter coordenadas físicas e, em seguida, usar PhysicalToLogicalPointForPerMonitorDPI para converter as coordenadas físicas em coordenadas lógicas com base no reconhecimento de DPI do HWND fornecido.

Considere dois aplicativos, um tem um valor PROCESS_DPI_AWARENESS de PROCESS_DPI_UNAWARE e o outro tem um valor de PROCESS_PER_MONITOR_AWARE. O aplicativo PROCESS_DPI_UNAWARE cria uma janela em um único monitor em que o fator de escala é 200% (192 DPI). Se ambos os aplicativos chamarem GetWindowRect nesta janela, eles receberão valores diferentes. O aplicativo PROCESS_DPI_UNAWARE receberá um rect com base em 96 coordenadas de DPI, enquanto o aplicativo PROCESS_PER_MONITOR_AWARE receberá coordenadas correspondentes ao DPI real do monitor. Se o PROCESS_PER_MONITOR_AWARE precisar do rect que o sistema retornou ao aplicativo PROCESS_DPI_UNAWARE , ele poderá chamar LogicalToPhysicalPointForPerMonitorDPI para os cantos de seu rect e passar o identificador para a janela do aplicativo PROCESS_DPI_UNAWARE . Isso retornará pontos com base no reconhecimento do outro aplicativo que pode ser usado para criar um rect.

Dica  

Como um aplicativo com um valor PROCESS_DPI_AWARENESS de PROCESS_PER_MONITOR_AWARE usa o DPI real do monitor, as coordenadas físicas e lógicas são as mesmas para esse aplicativo.

 

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows 8.1 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 R2 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h
Biblioteca User32.lib
DLL User32.dll
Conjunto de APIs ext-ms-win-ntuser-window-l1-1-4 (introduzido no Windows 10, versão 10.0.14393)

Confira também

PROCESS_DPI_AWARENESS

PhysicalToLogicalPointForPerMonitorDPI