Corrigir problemas de HDPI/dimensionamento com o Designer de Formulários do Windows no Visual Studio

Neste artigo, você aprenderá como resolver problemas de renderização devido a limitações de dimensionamento do Designer de Formulários do Windows em monitores HDPI executando o Visual Studio como um processo sem reconhecimento de DPI. HDPI significa pontos altos por polegada, com cada ponto representando um pixel de dispositivo físico.

A densidade de pixels mais alta cria imagens mais nítidas e exibe os elementos de tamanhos de dimensionamento de forma adequada. Sem o dimensionamento adequado, os elementos e o texto da interface do usuário ficam muito pequenos para serem usados com eficiência e podem se sobrepor. Para corrigir esse problema, o Windows dimensiona automaticamente o percentil da interface do usuário para corresponder à configuração de DPI. Por exemplo, uma configuração de DPI igual a 100% representa 96 DPIs, e 125% é 120 DPIs. Os monitores costumavam ser fornecidos com 96 pixels por polegada, que o Windows usava como linha de base para desenho de bitmap de 100%. No entanto, com o avanço da tecnologia de exibição, os monitores agora vêm com painéis de 300 DPI ou superior.

Quando um aplicativo se declara com reconhecimento de DPI, essa é uma instrução que especifica que ele se comporta bem em configurações de DPI mais altas e, portanto, o Windows pode aplicar o dimensionamento automático. Por outro lado, aplicativos sem reconhecimento de DPI são renderizados com um valor de DPI fixo igual a 96 pixels por polegada ou 100%, e, portanto, o dimensionamento automático não é aplicado.

O Designer de Formulários do Windows não tem reconhecimento de DPI

Observação

No Visual Studio 2022 versão 17.8 ou posterior, você pode evitar os problemas descritos neste artigo. O Visual Studio 2022 versão 17.8 fornece suporte para guias sem reconhecimento de DPI em um aplicativo com reconhecimento de DPI. Confira melhorias de DPI do Visual Studio. Isso permite que você projete o Windows Forms para contextos sem reconhecimento de DPI, sem exigir que você execute o Visual Studio no modo sem reconhecimento de DPI. Para usar essa configuração em um projeto do Windows Forms, defina a propriedade ForceDesignerDPIUnaware no arquivo de projeto true:

<PropertyGroup>
  ...
  <ForceDesignerDPIUnaware>true</ForceDesignerDPIUnaware>
</PropertyGroup>

O Visual Studio é um aplicativo com reconhecimento de DPI (pontos por polegada), o que significa que a exibição é dimensionada automaticamente. No entanto, o Designer de Formulários do Windows é um aplicativo sem reconhecimento de DPI, portanto, aparece como um bitmap em 96 DPI. Sem o suporte do dimensionamento automático, surgem problemas e sobreposições ao abrir formulários em monitores HDPI, como nesta imagem:

Screenshot of Windows Forms Designer on HDPI monitor that shows issues due to lack of autoscaling support.

Quando você abre um formulário no Designer de Formulários do Windows em um monitor HDPI, o Visual Studio exibe uma barra de informações que exibe a porcentagem de dimensionamento atual do monitor (por exemplo, 150%/144 DPI), uma opção para reiniciar o Visual Studio em dimensionamento de 100% para corresponder ao Designer de Formulários do Windows e mais informações. Ao reiniciar em dimensionamento de 100% o Visual Studio não reconhece DPI, permitindo a renderização adequada sem sobreposição.

Screenshot of the information bar in Visual Studio to restart in DPI-unaware mode.

Dica

  1. Se você fechou a barra de informações e deseja reiniciar o Visual Studio como sem reconhecimento de DPI, use a ferramenta DevEnv.exe.
  2. Se você não estiver trabalhando no Designer, poderá ignorar a barra de informações. Você também pode desabilitar as notificações para que a barra de informações não continue a aparecer.

Reiniciar o Visual Studio como um processo sem reconhecimento de DPI

A solução recomendada para resolver esses problemas de interface do usuário é reiniciar o Visual Studio como um processo sem reconhecimento de DPI, o que significa que ele é reiniciado em escala de 100% (96 DPI).

Para alternar ao sem reconhecimento de DPI:

  • Selecione a opção "Reiniciar o Visual Studio com dimensionamento de 100%" na barra de informações amarela que aparece ao abrir um formulário no Designer de Formulários do Windows.

É importante reiniciar o Visual Studio para retorná-lo ao padrão de processo com reconhecimento de DPI quando você terminar de trabalhar no Designer de Formulários do Windows.

Para retornar ao reconhecimento de DPI:

  • Feche e reabra o Visual Studio para retornar ao reconhecimento de DPI novamente. Caso prefira, selecione a opção Reiniciar o Visual Studio como um processo com reconhecimento de DPI na barra de informações.

Quando o Visual Studio é executado sem reconhecimento de DPI, os problemas de layout do designer são resolvidos, no entanto, as fontes podem parecer desfocadas e pode haver problemas em outros designers, como o Designer XAML. O Visual Studio exibe uma mensagem informativa diferente quando não reconhece DPI, "O Visual Studio está sendo executado como um processo sem reconhecimento de DPI. Os designers WPF e XAML podem não ser exibidos corretamente."

Observação

  • Se desencaixar as janelas de ferramentas depois de selecionar a opção para reiniciar o Visual Studio como um processo sem reconhecimento de DPI, a posição das janelas de ferramentas poderá mudar.
  • Se você usar o perfil padrão do Visual Basic ou se tiver a opção Salvar novos projetos quando criados desmarcada em Ferramentas>Opções>Projetos e Soluções, o Visual Studio não poderá reabrir o projeto quando ele for reiniciado como um processo sem reconhecimento de DPI. No entanto, você pode abrir o projeto selecionando-o em Arquivo>Projetos e Soluções Recentes.

Observação

  • Se você desencaixar as janelas de ferramentas depois de selecionar a opção para reiniciar o Visual Studio como um processo sem reconhecimento de DPI, a posição das janelas de ferramentas poderá mudar.
  • O perfil padrão do Visual Basic não reabrirá projetos quando o Visual Studio for reiniciado como um processo sem reconhecimento de DPI. Em vez disso, acesse seu projeto em Arquivo>Projetos e Soluções Recentes.

Usar o Windows para definir o dimensionamento da tela como 100%

Para evitar o uso do Visual Studio para alternar a escala da exibição, ajuste a escala nas configurações do Windows. Por exemplo, no Windows 11, você pode definir a escala para 100% (96 DPI).

Para fazer isso, digite Configurações de exibição na caixa de pesquisa da barra de tarefas e, em seguida, selecione Alterar configurações de exibição. Na janela Configurações, defina Alterar o tamanho do texto, dos aplicativos e de outros itens para 100%. Lembre-se de que a escala de 100% (96 DPI) pode tornar a interface do usuário muito pequena para uso prático.

Desabilitar a escala usando a ferramenta de linha de comando DevEnv

Para gerenciar suas configurações de exibição usando ferramentas de linha de comando em vez das ferramentas de interface do usuário, use DevEnv.exe. O comando devenv.exe usa /noscale como um parâmetro de linha de comando para ser executado no modo de dimensionamento de 100%. Veja como usá-lo:

  1. Selecione Ferramentas>Linha de comando>Prompt de Comando do Desenvolvedor na barra de menus do Visual Studio.
  2. Em seguida, digite devenv /noScale.

Outras opções

Além das opções mencionadas acima, você também pode experimentar as seguintes opções:

Solucionar problemas

Se a transição para o reconhecimento de DPI não funcionar no Visual Studio, verifique se o valor dpiAwareness NÃO está presente na subchave HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe do Editor do Registro. Exclua o valor se ele estiver presente.