Malowanie po ekranie

Twórcy Windows Vista / 2008 udostepniajac cala mase nowych mozliwosci odbieraja równoczesnie pewne funkcjonalnosci, które dotad dzialaly bez zarzutu. Wiekszosc zmian sprawiajacych wrazenie braku kompatybilnosci wynika z prostego faktu: Po wielu latach tlumaczenia programistom "nie róbcie balaganu" w koncu ktos postanowil to wyegzekwowac. Microsoft od dawna ostrzegal, ze Program Files to nie miejsce na pliki tymczasowe. Katalog Windows to nie miejsce na pliki ini. HKLM to nie podreczne repozytorium informacji o konfiguracji. Logów systemowych moze byc wiecej niz trzy. Takich zalecen jest wiele.
Informatyka istnieje po to, zeby leniwi ludzie sie nie przemeczali. Dotyczy to równiez programistów. Wprawdzie Microsoft mówi, czego nie wolno robic, ale skoro cos dziala, to po co sie przemeczac i zamiast prostej linijki kodu zastosowac bardziej zlozone rozwiazanie...? Skoro dziala... W Windows XP dzialalo. A system Vista / 2008 postanowil duza czesc takich zalecen wymusic. I aplikacje przestaly dzialac. Oczywiscie w swiat poszla informacja, ze winny jest system a nie programisci.
Minelo wiele miesiecy i programisci sie nauczyli. Lepiej pózno niz wcale. W efekcie praktycznie wszystkie rozwijane nadal aplikacje sa z Windows Vista / 2008 zgodne. I cale szczescie, bo dzieki restrykcyjnosci nowego systemu sa znaczaco lepiej napisane.
Jednym z aspektów zwiazanych ze zmianami w nowym systemie jest podejscie do malowania po ekranie. Stare dobre GDI dziala nadal, ale WPF (Avalon) i DWM (Desktop Window Manager) uzywa raczej DirectX. Problem pojawia sie w dwóch sytuacjach: kiedy w jednym oknie mieszane sa obie metody tworzenia obrazu i kiedy przez DirectDraw jakas aplikacja próbuje uzyskac dostep bezposrednio do ekranu. Windows Vista / 2008 nie utrudnia takich dzialan, ale nie wszystko jest w stanie tolerowac. W szczególnosci, korzystajacy z DirectX nowy interfejs nie jest w takiej sytuacji w stanie okreslic, co tak naprawde uzytkownik chce na ekranie zobaczyc. Dlatego, drogi sa dwie: albo zabronic takich zachowan albo zrezygnowac na chwile z nowego interfejsu i przejsc na tradycyjny sposób wyswietlania. Choc pierwsze podejscie moze wydawac sie typowe dla nowych systemów, Microsoft w tym przypadku postapil w jedynie sluszny sposób i po wykryciu dziwacznych sposobów malowania przelacza sie na tradycyjny sposób wyswietlania.
Pojawiaja sie dwa pytania: Czy to dla uzytkownika ma jakiekolwiek znaczenie oraz czy taka sytuacja zdarza sie w praktyce.
Odpowiedzi sa proste. Ma znaczenie, bo interfejs Windows Aero wykorzystuje nowy system wyswietlania ekranu. Musi wiec zostac wylaczony. Znika przy tym nie tylko przezroczystosc okienek, ale i Flip3D czy miniaturki okien. Da sie bez tego zyc, ale zmiana moze wygladac drastycznie.
Sytuacji, w której moze sie to zdarzyc jest kilka. Po pierwsze, sa to okienkowe gry, które korzystaja z DirectDraw poniewaz "wydaje" im sie, ze pracuja w pelnym ekranie. Po drugie, sa to aplikacje stworzone przez wyjatkowo nieporzadnych programistów. Na szczescie sa niemal niespotykane. Przypadek trzeci to sytuacja, kiedy po jednym oknie próbuje na raz malowac wielu programistów, którzy wcale ze soba nie wspólpracuja. A to zdarza sie w praktyce calkiem czesto w przypadku okna Internet Explorer. Kod w nim uruchamiany moze pochodzic z wielu róznych zródel. Doskonalym przykladem moga byc tu maszyny wirtualne Java czy obiekty QuickTime.
Wrazenie dla uzytkownika jest proste: jak wlacze Jave, wylacza mi sie Aero.
Co mozna z tym zrobic? W przypadku Javy odpowiedz jest prosta: zainstalowac najnowsza wersje. Jest juz poprawiona i nie sprawia takich problemów.
W przypadku aplikacji próbujacych malowac po ekranie, warto w opcjach sprawdzic, czy przypadkiem nie da sie ich przelaczyc w tryb GDI. To teoretycznie mniej wydajny mechanizm, ale na wspólczesnych komputerach radzi sobie zazwyczaj bez problemu. GDI jest zrozumialy dla WDM i w normalnych warunkach w niczym sobie z Aero nie przeszkadzaja.

Podsumowujac, stwierdzic mozna, ze problemy aplikacji z kompatybilnoscia moga objawiac sie na rózne sposoby. Jednym z nich jest wylaczenie interfejsu Aero. Podobnie jednak jak w przypadku innych aplikacji, najlepiej wtedy sprawdzic, czy producent przypadkiem nie postanowil napisac tej samej aplikacji ponownie, tym razem zgodnie z regulami sztuki programistycznej.

Autor: Grzegorz Tworek