[WINAPI C++] odświeżanie rysowania po pulpicie

0

Witam mam zrobiony program który wyświetla na pulpicie obrazki. Tylko, że działa w taki sposób że rysuje i koniec nie ma odświeżania,więc można to zamazać byle oknem. I tu mam pytanie: W jaki sposób zrealizować odświeżanie tego rysowania. Myślałem żeby stworzyć niewidzialne okno za pomocą WINAPI i w pętli wiadomości za pomocą jakiegoś tajmerka to robić. Tylko wydaje mi się że to może być mało optymalne i efektywne.
1) Jak powinno to być prawidłowo zrealizowane?
2) Jest jakiś sposób podpięcia się pod pętle komunikatów okna pulpitu ( wtedy bym wrzucił do WM_PAINT odpowiednie funkcje i nie było by problemu).
3) Gdzie można określić że okno stworzone za pomocą WINAPI ma się nie wyświetlać, ale ma działać pętla komunikatów (!WS_VISIBLE nie działa).

//Edit:
po poulpicie rysuje w taki sposób:
BitBlt(pulp,clie.right-460,0,460, 230, hDCTmp,0,0,SRCCOPY);

0
  1. Jest jakiś sposób podpięcia się pod pętle komunikatów okna pulpitu ( wtedy bym wrzucił do WM_PAINT odpowiednie funkcje i nie było by problemu).

Jest - subclassing kontrolki reprezentującej pulpit (wbrew pozorom to nic wymyslnego - zwykłe ListView)

  1. Gdzie można określić że okno stworzone za pomocą WINAPI ma się nie wyświetlać, ale ma działać pętla komunikatów (!WS_VISIBLE nie działa).

A tutaj to juz nie rozumiem w czym problem - stworz okno nie dajac flagi ze ma byc widoczne i nie wywoluj ShowWindow.

0

no i mam problem bo subclassing chyba odpada. Pulpit jest chroniony przed subclassingiem...

    hwndPul = FindWindow("Progman", NULL);
    hwndPul = GetWindow(hwndPul, GW_CHILD);
    hwndPul = GetWindow(hwndPul, GW_CHILD);
	
	staPulWndProc = (WNDPROC)SetWindowLong(hwndPul, GWL_WNDPROC, (LONG)nowaPulWndProc);

i debugując widze że staPulWndProc ma wartosc 0x00000000, więc chyba nie da się dobrać do procedury okna pulpitu, no chba że robie coś źle.

Poza tym:

	SetWindowLong(hwndPul, GWL_WNDPROC, (LONG)nowaPulWndProc);

    UpdateWindow(hwndPul);

    while(GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

też jakby nie chce mi działać, gdyż nie odbieram żadnej msg w funkcji GetMessage

Tak funkcja: (WNDPROC)SetWindowLong(hWnd, GWL_WNDPROC, (LONG)NewWndProc);
Generuje mi błąd: ERROR_ACCESS_DENIED
Więc nie da się wykonać subclassingu dla okna stworzonego przez inny proces :P

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