Compartilhar via


Dimensionamento automático

O dimensionamento automático permite que um formulário e seus controles, projetados em um computador com uma determinada resolução de exibição ou fonte, sejam exibidos adequadamente em outro computador com uma resolução ou fonte de exibição diferente. Ele garante que o formulário e seus controles serão redimensionados de forma inteligente para serem consistentes com janelas nativas e outros aplicativos nos computadores dos usuários e de outros desenvolvedores. O dimensionamento automático e os estilos visuais permitem que os aplicativos do Windows Forms mantenham uma aparência consistente quando comparados aos aplicativos nativos do Windows no computador de cada usuário.

Na maioria das vezes, o dimensionamento automático funciona conforme o esperado nos Windows Forms. No entanto, as alterações no esquema de fontes podem ser problemáticas. Para obter um exemplo de como resolver isso, consulte Como responder a alterações de esquema de fontes em um aplicativo do Windows Forms.

Necessidade de dimensionamento automático

Sem dimensionamento automático, um aplicativo projetado para uma resolução de exibição ou fonte aparecerá muito pequeno ou muito grande quando essa resolução ou fonte for alterada. Por exemplo, se o aplicativo for projetado usando Tahoma 9 ponto como uma linha de base, sem ajuste ele aparecerá muito pequeno se executado em um computador em que a fonte do sistema é Tahoma 12 pontos. Elementos de texto, como títulos, menus, conteúdo de caixa de texto e assim por diante, serão exibidos em tamanho menor que em outros aplicativos. Além disso, o tamanho dos elementos de interface do usuário que contêm texto, como a barra de título, menus e muitos controles, depende da fonte usada. Neste exemplo, esses elementos também aparecerão relativamente menores.

Uma situação análoga ocorre quando um aplicativo é projetado para uma determinada resolução de exibição. A resolução de exibição mais comum é de 96 pontos por polegada (DPI), o que equivale a um dimensionamento de exibição de 100%. No entanto, telas de resoluções mais altas, suportando dimensionamentos de 125%, 150%, 200% (que correspondem respectivamente a 120, 144 e 192 DPI) e acima, estão se tornando cada vez mais comuns. Sem ajuste, um aplicativo, especialmente um baseado em gráficos, projetado para uma resolução, aparecerá muito grande ou muito pequeno quando executado em outra resolução.

O dimensionamento automático busca resolver esses problemas ajustando automaticamente o tamanho do formulário e dos respectivos controles filho de acordo com o tamanho relativo da fonte ou a resolução de vídeo. O sistema operacional Windows dá suporte ao dimensionamento automático de caixas de diálogo usando uma unidade relativa de medida chamada unidades de diálogo. Uma unidade de diálogo é baseada na fonte do sistema e sua relação com pixels pode ser determinada por meio da função GetDialogBaseUnitsSDK do Win32. Quando um usuário altera o tema usado pelo Windows, todas as caixas de diálogo são ajustadas automaticamente de acordo. Além disso, o Windows Forms dá suporte ao dimensionamento automático de acordo com a fonte do sistema padrão ou a resolução de exibição. Opcionalmente, o dimensionamento automático pode ser desabilitado em um aplicativo.

Cuidado

Não há suporte para misturas arbitrárias de DPI e modos de dimensionamento de fontes. Embora você possa dimensionar um controle de usuário usando um modo (por exemplo, DPI) e colocá-lo em um formulário usando outro modo (Fonte) sem problemas, mas misturar um formulário base em um modo e um formulário derivado em outro pode levar a resultados inesperados.

Dimensionamento automático em ação

O Windows Forms usa a seguinte lógica para dimensionar automaticamente formulários e seu conteúdo:

  1. No momento do projeto, cada ContainerControl registra o modo de dimensionamento e a resolução atual no AutoScaleMode e no AutoScaleDimensions, respectivamente.

  2. Em tempo de execução, a resolução real é armazenada na propriedade CurrentAutoScaleDimensions. A propriedade AutoScaleFactor calcula dinamicamente a proporção entre a resolução de escala no tempo de execução e no tempo de design.

  3. Quando o formulário é carregado, se os valores de CurrentAutoScaleDimensions e AutoScaleDimensions forem diferentes, o método PerformAutoScale será chamado para dimensionar o controle e os filhos dele. Esse método suspende o layout e chama o método Scale para executar o dimensionamento real. Posteriormente, o valor de AutoScaleDimensions é atualizado para evitar o dimensionamento progressivo.

  4. PerformAutoScale também é invocado automaticamente nas seguintes situações:

    • Em resposta ao evento OnFontChanged, se o modo de dimensionamento for Font.

    • Quando o layout do controle de contêiner é retomado e uma alteração é detectada nas propriedades AutoScaleDimensions ou AutoScaleMode.

    • Conforme indicado acima, quando um pai ContainerControl está sendo dimensionado. Cada controle de contêiner é responsável por dimensionar os filhos dele usando fatores de dimensionamento próprios e não aquele do respectivo contêiner pai.

  5. Os controles filho podem modificar o próprio comportamento de dimensionamento por vários meios:

    • A propriedade ScaleChildren pode ser substituída para determinar se os controles filho devem ser dimensionados ou não.

    • O método GetScaledBounds pode ser substituído para ajustar os limites para os quais o controle é dimensionado, mas não a lógica de dimensionamento.

    • O método ScaleControl pode ser substituído para alterar a lógica de dimensionamento do controle atual.

Consulte também