2011-11-03 10 views
5

Mamy problem z jedną z naszych istniejących aplikacji opartych na systemie Win32 MFC. Nie wyświetla się poprawnie na ekranach z ustawieniami wysokiej rozdzielczości. Dokładniej w systemie Windows XP z wybraną rozdzielczością 120 dpi w aplikacji jest kilka miejsc, w których tekst się zwiększa, ale nie ich pojemniki (tekst przepełnia jego przycisk itp.). Dzieje się tak również w systemie Windows 7 (i Vista), gdy wybrana jest opcja> 96 dpi i wybrano "Użyj skalowania w stylu XP". Jeśli nie wybrano skalowania stylu XP, to rozumiem, że Win7 zamiast tego używa wirtualizacji DPI. Wszystko wygląda dobrze, gdy korzysta się z wirtualizacji DPI (rzeczy są rozmyte, ale przynajmniej są poprawne). Domyślnie w Win7 120 dpi używa skalowania w stylu xp, a następne ustawienie (144 dpi) nie. Tak więc nasza aplikacja wygląda poprawnie przy 144 dpi, ale źle przy 120 dpi.Aplikacja systemu Windows - problemy z DPI

Jeśli edytuję manifest aplikacji, aby zadeklarować aplikację jako "Świadoma DPI", to ta tura wirtualizacji DPI (ale nie skalowania dpi w stylu XP) i to mnie nie doprowadzi. Rzeczy wciąż wyglądają bardzo źle (brak zmian w przypadku 120 dpi, 144 dpi teraz zepsute).

Potrzebuję rozwiązać ten problem i próbowałem już czytać na temat zagadnień DPI/skalowania w ogóle i to było doświadczenie edukacyjne. Do tej pory nie znalazłem odpowiedniego rozwiązania. W tej chwili nie mam zamiaru robić dokładnej i poprawnej poprawki (aplikacja poprawnie skaluje wszystkie elementy zgodnie z dpi). Wymagałoby to wiele przeróbek. Myślę, że są naprawdę dwa możliwe rozwiązania. Jednym z nich jest wyłączenie jakiegokolwiek skalowania DPI razem. Oznaczałoby to, że jeśli system Win7 użytkownika został ustawiony na 120 dpi, wszystko w systemie byłoby dobre/duże, ale nasza aplikacja wyglądałaby poprawnie, ale byłaby mała w porównaniu ze wszystkim innym aplikacjami. Drugim rozwiązaniem byłoby dla niektórych, jak zmusić naszą aplikację do korzystania z wirtualizacji DPI, ale nigdy nie używać skalowania w stylu XP XP. Chcę, aby była to zmiana po stronie aplikacji i nie polegać na tym, że użytkownicy końcowi muszą wprowadzać zmiany w konfiguracji systemu Windows.

Do tej pory nie znalazłem sposobu na rozwiązanie.

Czy ktoś bardziej kompetentny w tej sprawie może odpowiedzieć i wskazać mi właściwy sposób?

Dzięki

+1

Czy problem występuje w kodzie układu lub w kodzie rysunku? Na przykład, czy problem polega na tym, że robisz przyciski i inne standardowe elementy sterujące x przez y pikseli, czy też masz problem z tym, że masz kod, który rysuje własne kontrolki (np. Za pomocą wywołań GDI) o stałych rozmiarach? Jak sobie radzisz z układem? Formularze? Szablony okien dialogowych? Niestandardowy kod? –

+0

Nie ma tu magii, wystarczy powiększyć okna. Lub mniejsze czcionki, wybierz swoją truciznę. –

Odpowiedz

2

nie może wymusić na 120 DPI Virtualization ustawień DPI. Sam to zbadałem dla produktu, ponieważ posiadanie rozmytego obrazu w wysokiej rozdzielczości wydawało się dobrym kompromisem.

Zakończyliśmy tworzenie pełnych przeróbek pozycjonowania i skalowania interfejsu użytkownika, aby skalować go poprawnie ze skalowaniem czcionek w ustawieniach wysokiej czułości. Klient jest teraz w pełni świadomy DPI i skaluje się prawidłowo w każdym ustawieniu DPI.

Wykonanie tego poprawnie zajęło jeden facet ~ 3 miesiące w naszym przypadku dla dość skomplikowanego klienta.

Mieliśmy plan wtórny, którego nigdy nie próbowaliśmy, ale może on zadziałać: Przy uruchomieniu przeczytaj współczynnik skalowania DPI systemu operacyjnego. Następnie zmniejsz wszystkie instancje czcionek według tego współczynnika, aby po ponownym skalowaniu czcionek system Windows powrócił do rozmiaru, w którym interfejs może je dopasować. Oczywiście użytkownicy z ustawieniami o wysokiej rozdzielczości nie będą mieli większych czcionek w aplikacji, ale będą co najmniej nadają się do użytku.