{"id":2809,"date":"2019-02-28T08:57:54","date_gmt":"2019-02-28T11:57:54","guid":{"rendered":"https:\/\/blog.lucianoreis.com\/?p=2809"},"modified":"2023-10-30T11:32:49","modified_gmt":"2023-10-30T14:32:49","slug":"visual-studio-em-monitores-hi-dpi","status":"publish","type":"post","link":"https:\/\/blog.lucianoreis.com\/2019\/02\/28\/visual-studio-em-monitores-hi-dpi\/","title":{"rendered":"Visual Studio em Monitores Hi DPI"},"content":{"rendered":"

Monitores de alta defini\u00e7\u00e3o s\u00e3o uma maravilha!  Por\u00e9m trazem um junto um pequeno problema para quem programa Windows Forms com Visual Studio.  Observe o exemplo abaixo:<\/p>\n\n\n

\"\"<\/figure>\n\n\n

Nesse caso o computador possui dois monitores, ambos 4K.\u00a0 A diferen\u00e7a \u00e9 que o monitor 1 possui 15″ e o monitor 2 possui 55″.\u00a0 O monitor 2 pode manter o tamanho das fontes em 100% por\u00e9m o monitor 1, como \u00e9 muito pequeno para uma defini\u00e7\u00e3o t\u00e3o alta necessita que se aplique um fator de amplia\u00e7\u00e3o, no caso acima, de 225% para que as letras sejam leg\u00edveis.<\/p>\n

At\u00e9 a\u00ed tudo bem, at\u00e9 mesmo quando se arrasta uma janela de um monitor para o outro percebe-se como o Windows trata bem essa quest\u00e3o.\u00a0 Quando a janela chega no outro monitor ela j\u00e1 aparece devidamente dimensionada e dentro do padr\u00e3o do fator de amplia\u00e7\u00e3o correto de cada monitor.<\/p>\n

At\u00e9 mesmo o Visual Studio se comporta bem nesse cen\u00e1rio, por se tratar de uma aplica\u00e7\u00e3o DPI-Aware, ele se ajusta automaticamente \u00e0 densidade de pontos do monitor em que est\u00e1 sendo executado.<\/p>\n

O problema s\u00f3 existe ao editar um Windows Form, pois o editor de Windows Forms do Visual Studio n\u00e3o possui suporte ao fator de amplia\u00e7\u00e3o causando assim uma s\u00e9rie de problemas para o programador ao desenhar os forms.\u00a0 Se o programador abre um form que j\u00e1 estava todo desenhado e corretamente alinhado neste cen\u00e1rio, o form fica todo torto, se o programador tenta corrigir, ao executar o programa fica tudo fora do lugar.\u00a0 \u00c9 um problema louco que tira o sono do programador porque parece que a \u00fanica solu\u00e7\u00e3o \u00e9 voltar para o monitor antigo com fator de amplia\u00e7\u00e3o de 100% uma vez que n\u00e3o d\u00e1 para utilizar um ultrabook com monitor 4K de 15″ sem alterar o fator de amplia\u00e7\u00e3o, visto que seria necess\u00e1rio uma lente de aumento para conseguir ver as coisas na tela.<\/p>\n

Depois de um longo per\u00edodo de sofrimento com esse problema, durante o qual tive que recorrer ao computador antigo para editar os Windows Forms encontrei a solu\u00e7\u00e3o nas documenta\u00e7\u00f5es da Microsoft.\u00a0 Para fazer uso do que vou apresentar certifique-se a vers\u00e3o do seu Visual Studio \u00e9 a partir de 15.8.<\/p>\n

Link para o artigo:
https:\/\/docs.microsoft.com\/en-us\/dotnet\/framework\/winforms\/disable-dpi-awareness-visual-studio<\/a><\/p>\n

\u00a0<\/p>\n

A Solu\u00e7\u00e3o do Problema<\/h2>\n

Em primeiro lugar tenha em mente que a vers\u00e3o testada foi a 15.9.6 do Visual Studio Enterprise 2017.<\/p>\n\n\n

\"\"<\/figure>\n\n\n

Verifique se as notifica\u00e7\u00f5es sobre fator de amplia\u00e7\u00e3o (DPI Scaling) est\u00e3o ativadas.<\/p>\n\n\n

\"\"<\/figure>\n\n\n

Ao abrir um item Windows Form o Visual Studio ir\u00e1 lhe informar do problema com o fator de amplia\u00e7\u00e3o na tarja amarela.  No caso em quest\u00e3o o fator est\u00e1 em 225%.<\/p>\n

Clique no link “Restart Visual Studio with 100% scaling”.  Fazendo isso o programa ir\u00e1 reiniciar em modo DPI-Unaware e o recurso “automatic scaling” estar\u00e1 desativado.<\/p>\n\n\n

\"\"<\/figure>\n\n\n

Se fosse s\u00f3 isso seria bem simples, mas tudo na vida tem um custo.  Nesse caso, como o automatic scaling est\u00e1 desativado (que define o fator de amplia\u00e7\u00e3o) os designers de Windows Presentation Foundation e Universal Windows Platform poder\u00e3o apresentar problemas.  Ent\u00e3o caso v\u00e1 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\u00e1 reiniciar em modo DPI-Aware novamente.<\/p>\n\n\n

\"\"<\/figure>\n\n\n

Infelizmente, se o seu projeto cont\u00e9m itens Windows Forms e itens WPF\/UWP ser\u00e1 necess\u00e1rio ficar fazendo esse procedimento de reiniciar o Visual Studio a cada vez que for trocar os itens em que vai trabalhar.<\/p>\n

<\/p>\n

Alternativa Para o Caso do Programador Que S\u00f3 Utiliza Windows Forms<\/h2>\n

Se voc\u00ea \u00e9 um programador que s\u00f3 trabalha com desenvolvimento Windwos Forms h\u00e1 uma alternatica para n\u00e3o precisar ficar passando por esse transtorno.  H\u00e1 uma chave no registry que faz com que o Visual Studio sempre inicie com automatic scaling desligado.<\/p>\n

Acesse a seguinte subchave no registry:
HKEY_CURRENT_USER\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layers<\/strong><\/p>\n

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

A URI do devenv.exe varia conforme a vers\u00e3o que voc\u00ea est\u00e1 utilizando do Visual Studio.  Segue alguns exemplos:<\/p>\n

Visual Studio 2022 Community:
C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\Common7\\IDE\\devenv.exe<\/p>\n

Visual Studio 2017 Community:
C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\Common7\\IDE\\devenv.exe<\/p>\n

Nota:<\/p>\n

Caso a sua vers\u00e3o do Visual Studio seja Professional ou Enterprise, substitua a palavra “Community” por “Professional” ou “Enterprise”.<\/p>\n

O Visual Studio ficar\u00e1 em modo DPI-Unaware at\u00e9 que voc\u00ea remova esta entrada do registry.<\/p>\n

Caso o programador opte por trabalhar em apenas um dos modos talvez seja sensato remover a notifica\u00e7\u00e3o, alterando para “False” o par\u00e2metro “DPI Scaling Notifications” citado logo no in\u00edcio deste tutorial.<\/p>\n

<\/p>\n

Solu\u00e7\u00e3o de Problemas<\/h2>\n

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

<\/p>\n

Conclus\u00e3o<\/h2>\n

Apesar de ser chato e trabalhoso ficar trocando os modos de trabalho do Visual Studio, \u00e9 poss\u00edvel programar em Windows Forms nos computadores com monitor Hi DPI.  Este \u00e9 um contratempo que eu realmente gostaria muito de ver solucionado em alguma vers\u00e3o futura do programa.<\/p>\n\n\n

<\/p>\n","protected":false},"excerpt":{"rendered":"

Saiba como resolver o problema de incompatibilidade do Visual Studio com monitores 4K e outros Hi DPI para aplica\u00e7\u00f5es Windows Forms.<\/p>\n","protected":false},"author":1,"featured_media":2344,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[146,56],"tags":[108,104,107,105,106],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blog.lucianoreis.com\/wp-content\/uploads\/2016\/07\/ide.png?fit=1114%2C609&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pav3ZT-Jj","_links":{"self":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/2809"}],"collection":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/comments?post=2809"}],"version-history":[{"count":18,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/2809\/revisions"}],"predecessor-version":[{"id":6349,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/posts\/2809\/revisions\/6349"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/media\/2344"}],"wp:attachment":[{"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/media?parent=2809"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/categories?post=2809"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.lucianoreis.com\/wp-json\/wp\/v2\/tags?post=2809"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}