uchwyt do pulpitu i rysowanie po nim

0

Witam. Chce stworzyć coś w stylu "pupilka" który będzie chodził sobie po pulpicie i wykonywał jakieś zdarzenia. Ale nie wiem jak się za to zabrać. Skąd wziąć uchwyt pulpitu?

Kolejnym moim problemem jest to, że jak nawet będę miał uchyt do pulpitu to przy rysowaniu czegoś na pulpicie muszę dostać się do komunikatu WM_PAINT. Wtedy w dllce mam stworzyć hooka? Czy jak? ;)

Czytałem coś o stałej HWND_DESKTOP, lecz:

SendMessage(HWND_DESKTOP, WM_DESTROY, 0, 0);

powinno zamknąć aplikację explorer.exe a nie zamyka.

Macie może jakieś pomysły co do rysowania tego pupilka? Ogarniam większość tematów z zakresu WinAPI a i z chęcią użyję jakiegoś sposobu którego nie znam ;)

1

hdc = GetDC(NULL)

i można rysować,

lub hdc = GetWindowDC( GetDesktopWindow() )

BeginPaint wywoływać tylko jako odpowiedź na komunikat WM_PAINT.

0

Kolejne pytanie. Jeżeli chcę rysować coś na pulpicie muszę rysować to po wywołaniu komunikatu WM_PAINT w głównej procedurze zdarzeniowej? Bo moim zdaniem jak wykryję wywołanie WM_PAINT, wykonam rysowanie i podam dalej ten komunikat to mój obrazek zostanie zamalowany. Więc Subclassing wypada z gry... Jest jakiś Hook przechwytujący ten komunikat po jego zakończeniu?

0

Dlaczego chcesz malować bezpośrednio po oknie pulpitu? Stwórz własne okno. Malowanie po pulpicie przyniesie tylko problemy.

0

W takim razie mam stworzyć własne okno? Ale jak chcę zrobić zwierzątko łażące po pulpicie nie będzie ono kwadratowe. Umiem tworzyć nieregularne kształty okna, lecz czy to nie zmuli mi działania programu? Tak pomysleć, że będę miał płynną animacje i zmienianie struktury okna jest raczej powolne... A może się mylę?

0

Umiem tworzyć nieregularne kształty okna, lecz czy to nie zmuli mi działania programu?
Widziałeś avatara @aurel? Ta owieczka pochodzi właśnie z takiego programu: biegała owieczka po pulpicie, łapała się za okna itp.
Program działa pod Windows 3.x, na komputerach setki razy wolniejsze niż obecne.

0

aha. Ok, w takim razie biore się do roboty

0

Stanąłem w pewnym miejscu. Teraz przygotowuje ruchy mojej postaci. Będę w tym celu odpowiednio zmieniał obraz (teksture) oraz Region kontrolki. (owa kontrolka jest właśnie tą postacią). Jak na razie używam CreatePolygonRgn do utworzenia kreatury (mojego pupila). Ale to od groma punktów. Nie ma może jakiejś funckji co z obrazu posiadającego jednolity kolor tła wyciągnie region? Bardzo by mi to ułatwiło sprawę.

0

Alternatywą może być metoda rastrowa:
http://msdn.microsoft.com/en-us/library/ms997507.aspx

0

Przeczytałem ten dokument, lecz nie znalazłem tam nic co by rozwiązało mój problem. Ale plus jest taki, że już wiem jak tworzyć półprzezroczyste okna ;P Jednak chciałbym powrócić na ziemię i zająć się wczytywaniem regionu z bitmapy... macie może coś jeszcze ciekawego?

0

BitBlt, StretchBlt

0

Oczywiście, że layered windows rozwiązało by twój problem, bo między innymi właśnie po to powstało. Najbardziej prawidłowy sposób "rysowania" po pulpicie to utworzenie nowego okna (w tym korzystając z layered windows) i ustawienie jego rodzica na pulpit.

0

Dobra mam już ustalone regiony. Jak chcę wypełniać okno co róż inną teksturą (to będzie taki pokaz slajdów tyle że szybki) to jakiego rodzaju rozszerzenia użyć w obrazkach wczytywanych? I za jaką bibliotekę do obsługi grafiki polecacie mi się zabrać? Bo windowsowe GDI wczytuje tylko bmp, a to dużo bajtów zajmuje. Potrzebuję czegoś oszczędniejszego.

0
gswidwa napisał(a):

Przeczytałem ten dokument, lecz nie znalazłem tam nic co by rozwiązało mój problem. Ale plus jest taki, że już wiem jak tworzyć półprzezroczyste okna ;P Jednak chciałbym powrócić na ziemię i zająć się wczytywaniem regionu z bitmapy... macie może coś jeszcze ciekawego?
Przeczytaj jeszcze raz. Z tekstu min. wynika, że mechanizm layered windows jest bardziej wydajny, zwłaszcza jeśli chodzi o animacje. No i tak jak pisałem, jest to podejście rastrowe a nie wektorowe, czyli przezroczystość zależy od koloru piksela, a nie od zadanego regionu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1