2009-09-11 13 views
7

Napisałem program, który maluje widżet na tapetę pulpitu, pod ikonami pulpitu i wszystko było dobrze. Ale ujawniłem dziwny błąd - mój program nie działał na niektórych innych komputerach - wyświetla po jednym pulpicie ten sam pulpit bez widgetu po starcie.rysowanie pod ikonami na pulpicie

Czy ktoś ma jakieś doświadczenie, jakąś wiedzę w tej dziedzinie? Proszę pomóż mi! :)

(Nie mogę znaleźć żadnych komputerów w pobliżu, gdzie widget nie działa, na moim komputerze wszystko działa dobrze Napisałem wiele programów testowych, których próby rysują wszystko na pulpicie przy użyciu raczej metod, , ale test wyświetla nic też w moich znajomych komputerów)

metoda rysowania.

pisałem dll, która znajdzie okna pulpitu (progman-> idealny dla całych> dziecko)) i tworzy haczyk i zainstalować własną procedurę okna dla pulpit. W procedurze okna spinanie WM_ERASEBKGND:

case WM_ERASEBKGND: 
    HDC hdc = (HDC)wparam; 
    PaintDesktop(hdc); 
    WidgetPaint(hdc); 
    return 1; 

// pominę w tym kodzie pobierania i ustawiania obszary obcinania do szybkiego rysunku. (Próbowałem wszystkie kombinacje z wycinek i bez przycinania)

I w testach próbuję również malować widżet w wiadomości WM_PAINT z tymi samymi wynikami - wszystko już działa u mnie, ale działa nie w ogóle moich znajomych.

upd: Rozwiązałem to! :)

+0

Czy Twój kod działa w systemie Windows XP i * nie * działa w systemie Windows Vista lub Windows 7? – MusiGenesis

+0

Tak, mój kod działa w XP i Windows Vista. Ale copmletely nie działa w systemie Windows 7. W Windows 7, przypuszczam, jego mechanizm ochrony. (Nie mogę nawet wyświetlić bibliotek DLL, które załadowano do procesu explorer.exe). – vsvasya

+1

Z ciekawości, jaka była poprawka? – Brian

Odpowiedz

3

Rozwiązałem to! To proste było 64-bitowe maszyny) Więc skompilowałem mój kod do 64-bitowego i rozpoczęcia pracy widżetu całkiem nieźle!

A także -

PaintDesktop(hdc); 

będzie produkować bardzo jasną tapetę w Windows7 (i Vista) z Aero. (Rozjaśnia się tapeta użytkownika). Musi być

CallWindowProc(OldWndProc, WM_ERASEBKGND, wparam, lparam); 

Przyczyną tego - Aero traktuje PaintDesktop() jako zwykłej farby (ponad wirtualnym tapetę ekranu, który jest taki sam jak na pulpicie) z kolorowym sumowaniu.

Pozdrawiam! :)

+0

Po prostu próbuję napisać coś podobnego. Chcę wyświetlić obraz pod ikonami na pulpicie. Nie jestem ekspertem od programowania systemu Windows, więc mam z tym trochę problemów. Czy możesz opublikować gdzieś kod źródłowy do swojego widżetu? – ciamej

+0

Czy możesz wysłać bardziej szczegółową odpowiedź. Ciekawi mnie, jak malujesz pod ikonami na pulpicie. – Ampere