W zwiazku z zaleceniami HAO wklejam rozmowe prywatna odnosnie Tworzonego Plugina:
-----------------------------------------------------------
Hej
ostatnio siedze nad Pluginem ktory wstawia "tapete" na okno z lista kontaktow
jest juz przygotowany prawie caly..
ale pojawia sie jeden problem.. Zeby moc w ogole naniesc na Liste
jakikolwiek obrazek i w ogole zeby po nim malowac .. to jest problem
bo standardowo w wszystkich systuacjach sprawa bylaby zalatwiona
w momencie CZYSZCZENIA tej kontrolki (komunikat WM_ERASEBKGND)
ale tutaj jest problem tego typu ze kazdy ITEM ma jeszcze rysowany Prostokat w kolorze tła.. wiec w normalnym trybie go nie widac - ujawnil sie podczas czyszczenia i nakladania bitmapy.
Wiec zrobilem jeszcze jeden trik w momencie rysowania (komunikat WM_PAINT) pozwalam kontrolce sie ODRYSOWAC i nastepnie przejmuje dalej kontrole nad rysowaniem.
Kopiuje dany obraz odrysowany na kontrolce do pamieci, pozniej rysuje swoj ewentulany kawalek bitmapy do odrysowania na kontrolke i dopiero na koncu nakladam wczesniej skopiowany do pamieci "oryginalny" kawalek - oczywiscie z przezroczystoscia koloru tla.
Wszystko powinno byc okej... ale...
Problem jest do tego stopnia uciazliwy ze podczas Scrolowania, Rozciagania, w ogole odrysowywania ListView-a pojawia sie efekt szybkiego przelaczania sie obrazow na siebie nakladajcych.
Bierze sie to z bardzo prostej przyczyny konjtrolka jest odrysowywana 3 razy w trakcie jednego komunikatu.
1. oryginalne rysowanie
2. rysowanie bitmapy
3. rysowanie (nakladanie) tylko wybranych elementow
Probowalem juz rozne sposoby zeby oryginalna obsluga rysowania nie rysowala tych prostokatow... ale nic z tego..
Po drugie najlepsza metoda na zalatwienie tej calej sprawy i w ogole rysowania,
byla mozliwosc zeby oryginalna obsluga nie rysowala bezposrednio po kontrolce tylko np w PAMIECI a pozniej moja kontrolka nanosila by poprawki w pamici i dopiero FINALNY efekt odrysowywany bylby na kontrolce...
Nie znam metody na rozwiazanie tego problemu.... pomozcie..
Dobrze by bylo gdyby w przyszlym Konnekcie bylaby mozliwosc ustawic
jedna FLAGE - rysuj w pamieci - i przekazywany bylby do niej np uchwyt HDC..
Zajebista sprawa.
Nie wiem pod jakim komunikatem jest ukryte odrysowywanie kazdego poszczegolnego item-a....
pozdrawiam
-----------------------------------------------------------
odpowiedz HAO:
Już wcześniej pisałem - K z kontrolką listy obchodzi się dosyć brutalnie. Głównie dlatego - bo lista kontaktów odrysowywana jest właśnie w pamięci (opcja - buforowane wyświetlanie).
W kodzie UI panuje już na prawdę nieziemski bałagan i nie zamierzam go zbytnio zmieniać aż do prac przy nowym API dla niego.
Ale jest ratunek - odrysowywanie pojedynczych elementów odbywa się standardowo jak w WinAPI - okno główne obsługuje komunikat WM_DRAWITEM - możesz więc wysyłać do niego odpowiednio spreparowane komunikaty - można w nich przekazać rozmiar obszaru elementu, czy właśnie uchwyt HDC.
-----------------------------------------------------------
p.s.
duzo bledow robie <hihi>