2012-02-21 17 views
37

Stworzyłem aplikację, która działa idealnie, dopóki użytkownik nie wybierze 125% lub 150%. Przerwałoby to moją aplikację. Później znalazłem sposób na znalezienie rozmiaru czcionki, wykrywając DPI.Wykryj rozmiar czcionki w oknach (100%, 125%, 150%)

To działało świetnie, dopóki ludzie z chińskimi wersjami systemu Windows 7 nie zaczęli używać mojej aplikacji. Cała aplikacja łamie się w chińskich oknach 7. Z tego co mogę powiedzieć (nie mogę tego przetestować, bo mam tylko angielską wersję i instalacja pakietów językowych nie powoduje problemu) Chińskie znaki powodują dziwne DPI, które przerywa moją aplikację.

mój bieżący kod działa tak:

if (dpi.DpiX == 120) //For 125% fonts 
{ 
    //Resize form and set default font to correct problems 
} 
else if (dpi.DpiX == 96) //For 100 and 150% fonts 
{ 
    //Resize form and set default font to correct problems 
} 

na angielskiej wersji systemu Windows 7, który działa świetnie, ale jakoś chińskie wersje pominąć prawo przez to, a forma niszczy się, ze sterowaniem nawet nie pokazuje się, Czcionka bardzo duża i przesuwająca się obok problemu, przesuwając ramki z obrazkami.

Jaki jest więc dobry sposób na wykrycie skali czcionek systemu Windows (100%, 125% i 150%) bez wykrywania interfejsu API? Potrzebuję czegoś solidnego, które zadziała na wszystkich systemach operacyjnych Windows i językach.

+0

Pisałem bardzo szybko i popełniłem kilka błędów w pisowni. Chciałem powiedzieć "DPI", a nie "API". Przepraszam –

+0

To, co opisujesz, brzmi bardziej jak problem ze sterownikiem wideo i/lub zainstalowanymi czcionkami ... – Yahia

+0

Tylko sugestia: jeśli masz poważny zapas chińskich klientów, warto zainwestować trochę czasu, aby stworzyć przynajmniej "VirtualMachine" dla 'VirtualBox' lub' VmWare', dzięki czemu możesz przetestować na nim aplikację z jak najbliższą autentycznością, jak to tylko możliwe. – Tigran

Odpowiedz

16

Prawidłowy sposób postępowania zmienne ustawienia DPI nie jest wykrycie ich i dostosowanie rozmiarów formantów ręcznie w switch rachunku (na początek, jest o wiele więcej możliwości niż te, które pokazują w próbce if oświadczenie).

Zamiast tego należy ustawić AutoScaleMode property swojego formularza na AutoScaleMode.Dpi i pozwolić frameworkowi zająć się tym za Ciebie.

Dodaj następujący kod do konstruktora formularza (lub ustawić tę właściwość w czasie projektowania):

this.AutoScaleMode = AutoScaleMode.Dpi; 

Chociaż może wolisz używać AutoScaleMode.Font. Aby uzyskać więcej informacji na temat automatycznego skalowania, zobacz the MSDN documentation.

+1

Próbowałem to zrobić, ale problem polega na tym, że moja aplikacja przerywa działanie z tym –

+1

@user Co oznacza "messes up"? Co dokładnie idzie nie tak? Jak próbowałeś debugowanie go?Czy używasz względnego pozycjonowania dla swoich elementów sterujących, np. Umieszczając je w kontenerach i ustawiając właściwości 'Kotwica' i' Dock'? Bezwzględne pozycjonowanie nigdy nie zadziała, nawet jeśli użytkownik zmieni domyślną czcionkę twarz/rozmiar, a tym mniej, gdy DPI się zaangażuje. –

+8

przy użyciu AutoScaleMode.none poprawiono mój problem! –