Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Windows Vista e versões posteriores do sistema operacional permitem que os usuários alterem a configuração de pontos por polegada (dpi) para que a maioria dos elementos da interface do usuário na tela pareça maior. Em versões anteriores do Windows, o dimensionamento tinha que ser implementado por aplicativos. No Windows Vista e versões posteriores, o DWM (Desktop Window Manager) executa o dimensionamento padrão para todos os aplicativos que não lidam com seu próprio dimensionamento. Os aplicativos cliente do Microsoft UI Automation devem levar esse recurso em consideração.
Este tópico contém as seguintes seções:
- Dimensionamento no Windows Vista e versões posteriores
- Dimensionamento em clientes de automação da interface do usuário
Dimensionamento no Windows Vista e versões posteriores
A configuração dpi padrão é 96, o que significa que 96 pixels ocupam uma largura ou altura de uma polegada nocional. A medida exata de uma "polegada" depende do tamanho e da resolução física do monitor. Por exemplo, em um monitor de 12 polegadas de largura, com uma resolução horizontal de 1280 pixels, uma linha horizontal de 96 pixels se estende cerca de 9/10 de polegada.
Alterar a configuração de dpi não é o mesmo que alterar a resolução da tela. Com o dimensionamento de dpi, o número de pixels físicos na tela permanece o mesmo. No entanto, o dimensionamento é aplicado ao tamanho e ao local dos elementos da interface do usuário. Esse dimensionamento pode ser executado automaticamente pelo DWM para desktop e para aplicativos que não pedem explicitamente para não serem dimensionados.
Com efeito, quando o utilizador define o fator de escala para 120 dpi, uma polegada vertical ou horizontal no ecrã torna-se maior em 25 por cento. Todas as dimensões são dimensionadas de acordo. O deslocamento de uma janela de aplicação a partir da borda superior e da borda esquerda do ecrã aumenta em 25 por cento. Se o dimensionamento do aplicativo estiver habilitado e o aplicativo não reconhecer o dpi, o tamanho da janela aumentará na mesma proporção, juntamente com os deslocamentos e tamanhos de todos os elementos da interface do usuário que ela contém.
Observação
Por padrão, o DWM não executa dimensionamento para aplicativos sem reconhecimento de dpi quando o usuário define o dpi como 120, mas executa o dimensionamento quando o dpi é definido como um valor personalizado de 144 ou superior. No entanto, o usuário pode substituir o comportamento padrão.
O dimensionamento de tela cria novos desafios para aplicativos que estão preocupados de alguma forma com as coordenadas da tela. A tela agora contém dois sistemas de coordenadas: físico e lógico. As coordenadas físicas de um ponto são o deslocamento real em pixels do canto superior esquerdo do ponto de origem. As coordenadas lógicas são os desvios que ocorreriam se os próprios pixels fossem escalados.
Suponha que você crie uma caixa de diálogo com um botão nas coordenadas (100, 48). Quando essa caixa de diálogo é exibida no padrão de 96 dpi, o botão está localizado nas coordenadas físicas de (100, 48). A 120 dpi, está localizado em coordenadas físicas de (125, 60). Mas as coordenadas lógicas são as mesmas em qualquer configuração dpi: (100, 48).
As coordenadas lógicas são importantes, porque tornam o comportamento do sistema operacional e dos aplicativos consistentes, independentemente da configuração de dpi. Por exemplo, normalmente, a função GetCursorPos retorna as coordenadas lógicas. Se você mover o cursor sobre um elemento em uma caixa de diálogo, as mesmas coordenadas serão retornadas, independentemente da configuração de dpi. Se você desenhar um controle em (100, 100), ele será desenhado para essas coordenadas lógicas e ocupará a mesma posição relativa em qualquer configuração de dpi.
Dimensionamento em clientes de automação da interface do usuário
A API de automação da interface do usuário não usa coordenadas lógicas. Os métodos e propriedades a seguir retornam coordenadas físicas ou tomam coordenadas físicas como parâmetros.
- IUIAutomation::ElementFromPoint
- IUIAutomation::ElementFromPointBuildCache
- IUIAutomationElement::GetClickablePoint
- IUIAutomationElement::CurrentBoundingRectangle
- IUIAutomationElement::CachedBoundingRectangle
- IRawElementProviderFragment::BoundingRectangle
Por padrão, os aplicativos de automação da interface do usuário que estão sendo executados em um ambiente que não está definido como 96 dpi não obterão resultados corretos desses métodos e propriedades. Por exemplo, como a posição do cursor está em coordenadas lógicas, o cliente não pode passar essas coordenadas para IUIAutomation::ElementFromPoint obter o elemento que está sob o cursor. Além disso, o aplicativo não será capaz de colocar corretamente as janelas fora de sua área de cliente.
A solução tem duas partes.
Primeiro, torne o aplicativo cliente dpi-aware. Para fazer isso, chame a função SetProcessDPIAware na inicialização. Esta função torna todo o processo consciente do dpi, o que significa que todas as janelas que pertencem ao processo não são redimensionadas.
Em segundo lugar, para obter as coordenadas do cursor, chame a função GetPhysicalCursorPos.