Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Winapi - bitmapa i jej odświeżanie

Ostatnio zmodyfikowano 2014-02-03 09:44
Autor Wiadomość
Monika90
» 2014-02-02 20:35:37
Do wywołania poprzedniej procedury okna należy użyć CallWindowProc, to co zwraca GetWindowLong to niekoniecznie jest wskaźnik do funkcji.
P-103893
kill
Temat założony przez niniejszego użytkownika
» 2014-02-02 20:45:14
Dzięki za pomoc, mam jeszcze jedno pytanie odnośnie tego.
Czy jest możliwość zrobienia tego na odwrót?

Tzn. Najpierw żebym ja narysował a później dopiero narzucić to co było narysowane?
P-103894
Monika90
» 2014-02-02 20:55:54
Spróbuj.
P-103895
kill
Temat założony przez niniejszego użytkownika
» 2014-02-02 20:59:43
Gdybym nie spróbował nie zadałbym pytania ;)
I niestety efekt był taki iż mój rysunek był nad rysunkiem wcześniejszym.
Czyli taki sam efekt...

PS: Wydaje mi się że jakiś komunikat może mieszać, ale nie jestem pewny
PS2: Problem tkwi chyba że najpierw powinno być BeginPaint..EndPaint a dopiero później GetDC...
Albo coś robie źle...
P-103897
Monika90
» 2014-02-02 21:33:08
Możesz spróbować z innymi komunikatami, może WM_ERASEBKGND?

W ogóle zmiana zachowania klasy poprzez dziedziczenie wymaga znajomości szczegółów jej działania. Jeżeli klasa podstawowa nie była projektowana z myślą o tym by po niej dziedziczyć i nie ma udokumentowanego interfejsu dla klas pochodnych, to nie wiele można zrobić.
P-103900
kill
Temat założony przez niniejszego użytkownika
» 2014-02-02 21:36:01
Próbowałem WM_ERASEBKGND.
Czy to nie jest tak że BeginPaint...EndPaint muszą być przed GetDc ?
P-103901
Monika90
» 2014-02-02 21:46:43
Pokaż kod.
P-103902
kill
Temat założony przez niniejszego użytkownika
» 2014-02-02 21:53:01
C/C++
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
   
    HDC hdc;
    HDC hdc2;
   
    switch( message )
    {
       
    case WM_PAINT:
        hdc = GetDC( hWnd );
        hdc2 = CreateCompatibleDC( hdc );
        hOldBmp =( HBITMAP ) SelectObject( hdc2, hBmp );
        BitBlt( hdc, x2, y2, w2, h2, hdc2, 0, 0, SRCCOPY );
       
        SelectObject( hdc2, hOldBmp );
        DeleteDC( hdc2 );
        ReleaseDC( hWnd, hdc );
        CallWindowProc( old, hWnd, WM_PAINT, wParam, lParam );
        break;
        default:
        {
           
            return DefWindowProc( hWnd, message, wParam, lParam );
        }
    }
   
    return 0;
   
}


Tym wywołuje

C/C++
old =( WNDPROC ) GetWindowLong( hWnd, GWL_WNDPROC );
CallWindowProc( WndProc, hWnd, WM_PAINT, NULL, NULL );
SetWindowLong( hWnd, GWL_WNDPROC,( LONG ) WndProc );
P-103904
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona