Função PhysicalToLogicalPointForPerMonitorDPI (winuser.h)
Converte um ponto em uma janela de coordenadas físicas em coordenadas lógicas, independentemente do reconhecimento de pontos por polegada (dpi) do chamador. Para obter mais informações sobre os níveis de conscientização de DPI, consulte PROCESS_DPI_AWARENESS.
Sintaxe
BOOL PhysicalToLogicalPointForPerMonitorDPI(
[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 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.
Retornar valor
Retorna TRUE se tiver êxito ou FALSE caso contrário.
Comentários
Em 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, 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 da 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_PER_MONITOR_AWARE 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_DPI_UNAWARE precisar da ret que o sistema retornou ao aplicativo PROCESS_PER_MONITOR_AWARE , ele poderá chamar LogicalToPhysicalPointForPerMonitorDPI para os cantos de sua rect e passar um identificador para a janela do aplicativo PROCESS_PER_MONITOR_AWARE . Isso retornará pontos com base no reconhecimento do outro aplicativo que pode ser usado para criar uma rect. Isso funciona porque uma PROCESS_PER_MONITOR_AWARE usa a DPI real do monitor, as coordenadas lógicas e físicas são idênticas.
Requisitos
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) |