Facebook Pixel
Visual Studio em Monitores Hi DPI

Visual Studio em Monitores Hi DPI

Monitores de alta definição são uma maravilha!  Porém trazem um junto um pequeno problema para quem programa Windows Forms com Visual Studio.  Observe o exemplo abaixo:

Nesse caso o computador possui dois monitores, ambos 4K.  A diferença é que o monitor 1 possui 15″ e o monitor 2 possui 55″.  O monitor 2 pode manter o tamanho das fontes em 100% porém o monitor 1, como é muito pequeno para uma definição tão alta necessita que se aplique um fator de ampliação, no caso acima, de 225% para que as letras sejam legíveis.

Até aí tudo bem, até mesmo quando se arrasta uma janela de um monitor para o outro percebe-se como o Windows trata bem essa questão.  Quando a janela chega no outro monitor ela já aparece devidamente dimensionada e dentro do padrão do fator de ampliação correto de cada monitor.

Até mesmo o Visual Studio se comporta bem nesse cenário, por se tratar de uma aplicação DPI-Aware, ele se ajusta automaticamente à densidade de pontos do monitor em que está sendo executado.

O problema só existe ao editar um Windows Form, pois o editor de Windows Forms do Visual Studio não possui suporte ao fator de ampliação causando assim uma série de problemas para o programador ao desenhar os forms.  Se o programador abre um form que já estava todo desenhado e corretamente alinhado neste cenário, o form fica todo torto, se o programador tenta corrigir, ao executar o programa fica tudo fora do lugar.  É um problema louco que tira o sono do programador porque parece que a única solução é voltar para o monitor antigo com fator de ampliação de 100% uma vez que não dá para utilizar um ultrabook com monitor 4K de 15″ sem alterar o fator de ampliação, visto que seria necessário uma lente de aumento para conseguir ver as coisas na tela.

Depois de um longo período de sofrimento com esse problema, durante o qual tive que recorrer ao computador antigo para editar os Windows Forms encontrei a solução nas documentações da Microsoft.  Para fazer uso do que vou apresentar certifique-se a versão do seu Visual Studio é a partir de 15.8.

Link para o artigo:
https://docs.microsoft.com/en-us/dotnet/framework/winforms/disable-dpi-awareness-visual-studio

 

A Solução do Problema

Em primeiro lugar tenha em mente que a versão testada foi a 15.9.6 do Visual Studio Enterprise 2017.

Verifique se as notificações sobre fator de ampliação (DPI Scaling) estão ativadas.

Ao abrir um item Windows Form o Visual Studio irá lhe informar do problema com o fator de ampliação na tarja amarela.  No caso em questão o fator está em 225%.

Clique no link “Restart Visual Studio with 100% scaling”.  Fazendo isso o programa irá reiniciar em modo DPI-Unaware e o recurso “automatic scaling” estará desativado.

Se fosse só isso seria bem simples, mas tudo na vida tem um custo.  Nesse caso, como o automatic scaling está desativado (que define o fator de ampliação) os designers de Windows Presentation Foundation e Universal Windows Platform poderão apresentar problemas.  Então caso vá editar itens desse tipo (WPF/UWP) feche todas as abas que estiverem com itens Windows Forms abertos e clique em “Restart Visual Studio with automatic scaling”, que o Visual Studio irá reiniciar em modo DPI-Aware novamente.

Infelizmente, se o seu projeto contém itens Windows Forms e itens WPF/UWP será necessário ficar fazendo esse procedimento de reiniciar o Visual Studio a cada vez que for trocar os itens em que vai trabalhar.

Alternativa Para o Caso do Programador Que Só Utiliza Windows Forms

Se você é um programador que só trabalha com desenvolvimento Windwos Forms há uma alternatica para não precisar ficar passando por esse transtorno.  Há uma chave no registry que faz com que o Visual Studio sempre inicie com automatic scaling desligado.

Acesse a seguinte subchave no registry:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers

Dentro da subchave crie a seguinte entrada:
Entry: <URI do devenv.exe>
Type: REG_SZ
Value: DPIUNAWARE

A URI do devenv.exe varia conforme a versão que você está utilizando do Visual Studio.  Segue alguns exemplos:

Visual Studio 2022 Community:
C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\devenv.exe

Visual Studio 2017 Community:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe

Nota:

Caso a sua versão do Visual Studio seja Professional ou Enterprise, substitua a palavra “Community” por “Professional” ou “Enterprise”.

O Visual Studio ficará em modo DPI-Unaware até que você remova esta entrada do registry.

Caso o programador opte por trabalhar em apenas um dos modos talvez seja sensato remover a notificação, alterando para “False” o parâmetro “DPI Scaling Notifications” citado logo no início deste tutorial.

Solução de Problemas

Se a transição entre DPI-Aware e DPI-Unaware não estiver funcionando corretamente, verifique no registry a existência e então elimine o valor “dpiAwareness” que fica na subchave:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\devenv.exe

Conclusão

Apesar de ser chato e trabalhoso ficar trocando os modos de trabalho do Visual Studio, é possível programar em Windows Forms nos computadores com monitor Hi DPI.  Este é um contratempo que eu realmente gostaria muito de ver solucionado em alguma versão futura do programa.

Deixe seu comentário