2016-03-31 33 views
0

C# ve .Net 4.5 kullanarak bir Yazılım üzerinde çalışıyorum. Projeyi% 100 dpi ile eski bir makinede başlattım. Yeni makinemde, yüksek çözünürlüklü görüntüden dolayı% 200'lük bir ölçekleme ayarlamak zorunda kaldım.Kaynak kodumdaki HiDPI özelliklerini kullanmam gerekir mi, yoksa .Net tarafından sağlanmıştır. Windows®

Visual Studio Tasarımcısı içinde, yazılımın Gui'si mükemmel bir şekilde oluşturulur: Gui within the Designer. derlenmiş yazılımın

Gui kötü hale getirir: Gui in compiled software.

Benim beklentim sadece .Net Gui Elements/Kontroller ve hiçbir öz tasarlanmış gui öğeleri kullanarak olduğum için, pencereler sorunsuz ölçeklendirme işlemek gerektiğini vardır. Ama gördüğüm gibi, pencereler yok.

Visual Studio'daki proje ayarlarında bir HiDPI Seçeneğini etkinleştirmem gerekir mi yoksa kodumdaki HiDPI'yi mi kullanmalıyım? Varsayılan olarak

cevap

4

, çoğu Windows uygulamaları farkında dpi değildir Forms. Aslında, çoğu Windows uygulaması DPI'nın farkında değildir. Yani opt-in DPI-farkındalık için Uygulama bildiriminde gerekir:

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" 
      xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" > 
<asmv3:application> 
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings"> 
    <dpiAware>true</dpiAware> 
    </asmv3:windowsSettings> 
</asmv3:application> 
</assembly> 

DPI-farkındalık işlem başına olduğundan, VS tasarımcısı konuda başka seçeneği yok - o Visual Studio, içinde çalışır DPI farkında.

her şeyin olsa, düşük DPI ve yüksek DPI hem düzgün çalıştığından emin olun. DPI farkında "Ben tüm DPI ölçeklemeyi doğru bir şekilde ele alacağım, benim için onu uyarmaya gerek yok; teşekkürler." Umarım, formlarınızı uygun otomatik ölçeklendirme ve düzen ile ya da pikseller yerine aygıttan bağımsız birimler kullanarak tasarlamışsınızdır.

Uygulamanızın, DPI tarafından bilincinde olduğunu beyan etmediği durumlarda, Windows, sizden gelen eski bir uygulama olduğunuzu varsayar. DPI'yı düzgün bir şekilde kullanmayın. Senin durumunda yarım boyutunu ve sonra tekrar normal boyutlarda ortaya çıkan yüzeyi upscales - Yani aslında daha küçük bir ekrana render olduğunuzu yapıyor, sorunları önlemek için. Bu, özellikle metinle birlikte bulanıklıklara neden olur, ancak her şeyin uygun boyut ve oranlara sahip olmasını sağlar - örn. İçindeki metinden daha küçük düğmeler veya üst üste binen kontroller almazsınız.

Windows Forms ve WPF Hem doğru layouting yaklaşımları kullanırsanız, bu nedenle .NET kesinlikle DPI farkında-yeteneğine sahiptir, DPI düzgün şekilde gerçekleştirilmesi için büyük destek var. Ancak her ikisi de aynı zamanda DPI-habersiz olma kabiliyetine sahiptir ve çoğu uygulama hala DPI sorunlarını göz ardı etmektedir, bu nedenle varsayılan herhangi bir diğer Windows uygulamasıyla aynıdır. "Eski WPF" uygulamaları olmadığından ve WPF'yi yapmanın en basit yolu da DPI'nın farkında olduğu için, WPF için varsayılan proje şablonu zaten DPI farkındalığını bildiren bir bildirimi içerdiğinden, Windows Forms'da projenizi oluşturduğunuzu varsayıyorum :) Windows'un günümüzde nasıl geliştiği göz önüne alındığında, muhtemelen tüm uyumluluk özelliklerini düzgün bir şekilde yönetmek için bir derleme bildirimi isteyebilirsiniz :)

Ekstra bonus için, farklı DPI ile birden çok monitörünüz olduğunda daha fazla sorun var - uygun bir şekilde bildirmek için Bunun için destek, <dpiAware>true/PM</dpiAware> kullanırsınız. Bu yalnızca Windows 8.1+ sürümünde kullanılabilir ve doğru bir şekilde uygulanması oldukça zor olabilir.