fenster neuzeichnen



  • hi,
    eine WM_PAINT funktion existiert und funtkioniert.
    das neuzeichnen klappt tadellos, wenn ich das fenster minimiere/maximiere.
    wenn ich jedoch ein fremd-fenster über meinem fenster bewege, wird es nicht vollständig neugezeichnet, woran kann das liegen?


  • Mod

    Zeig uns Deine WM_PAINT Funktion...

    Zeichnest Du noch in anderen Routinen? Das solltest Du nicht tun...



  • case WM_PAINT:
    		{
    			BITMAP bm;
    			PAINTSTRUCT ps;
    			HDC hdc = BeginPaint(hWnd, &ps);
    			HDC hdcMem = CreateCompatibleDC(hdc);
    			HBITMAP hbmOld = SelectObject ( hdcMem, membmp.hscrbmp );
    			GetObject(membmp.hscrbmp, sizeof(bm), &bm);
    			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
    			SelectObject(hdcMem, hbmOld);
    			DeleteDC(hdcMem);
    			EndPaint(hWnd, &ps);
    		}
    		break;
    

    das ist die einzige stelle, an der gezeichnet wird.
    bei der releaseversion geht es jetzt einigermaßen, aber wenn ich von diesem programm aus ne konsole starte und mit dem konsolenfenster langsam übers windowsfenster fahre, besteht das problem weiter. 😕



  • hat sich erledigt, ich hatte DefWindowProc an der falschen stelle.
    so muss es aussehen und funzt perfekt
    LRESULT CALLBACK WndProc ( HWND hWnd, UINT umsg, WPARAM wParam, LPARAM lParam )
    {
    switch ( umsg )
       {
    
    case WM_PAINT:
    		{
    			BITMAP bm;
    			PAINTSTRUCT ps;
    			HDC hdc = BeginPaint(hWnd, &ps);
    			HDC hdcMem = CreateCompatibleDC(hdc);
    			HBITMAP hbmOld = SelectObject ( hdcMem, membmp.hscrbmp );
    			GetObject(membmp.hscrbmp, sizeof(bm), &bm);
    			BitBlt(hdc, 0, 0, bm.bmWidth, bm.bmHeight, hdcMem, 0, 0, SRCCOPY);
    			SelectObject(hdcMem, hbmOld);
    			DeleteDC(hdcMem);
    			EndPaint(hWnd, &ps);
    		}
    		break;
    default:
    		return DefWindowProc ( hWnd, umsg, wParam, lParam );
     }
       return 0;
    }
    

Anmelden zum Antworten