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. |
|
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? |
|
Monika90 |
» 2014-02-02 20:55:54 Spróbuj. |
|
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... |
|
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ć. |
|
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 ?
|
|
Monika90 |
» 2014-02-02 21:46:43 Pokaż kod. |
|
kill Temat założony przez niniejszego użytkownika |
» 2014-02-02 21:53:01 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 old =( WNDPROC ) GetWindowLong( hWnd, GWL_WNDPROC ); CallWindowProc( WndProc, hWnd, WM_PAINT, NULL, NULL ); SetWindowLong( hWnd, GWL_WNDPROC,( LONG ) WndProc );
|
|
1 « 2 » 3 |