problem mit WM_PAINT



  • Hi, ich zeichne mein komplettes Fenster selbst, ich benutze dazu die WM_PAINT Nachricht, wenn ich mein Fenster jetzt aber "über die Bildschirmkante hinaus" schiebe und dann wieder zurück wird der Bereich der "auserhalb des Bildschirms" war nicht neu gezeichnet! Steuerelemente wie z.B. Buttons welche ich mithilfe von WM_DRAWITEM zeichne und die auch in besagtem Breich liegen werden allerdings korrekt dargestellt.

    Wie kann ich diesem Problem Herr werden?



  • code^^ bitte ohne gehts denk ich mal nicht Gruß Chris



  • Mein Code sieht folgendermaßen aus:

    case WM_PAINT:
            {
            char		text[500];
                PAINTSTRUCT ps;
                HGDIOBJ		old_brush	= NULL;
                HGDIOBJ		old_pen		= NULL;
                HGDIOBJ		old_font	= NULL;
                HDC			hDC			= BeginPaint(hwnd, &ps);
                RECT		r;
    
                r = ps.rcPaint;
    
                // Client-Bereich
                old_pen		= SelectObject(hDC, p_wnd_border);
                old_brush	= SelectObject(hDC, b_wnd_bkg);
    
                Rectangle(hDC, 0, 0, r.right - r.left, r.bottom - r.top);
    
                old_brush	= SelectObject(hDC, (HBRUSH)GetStockObject(BLACK_BRUSH));
                Rectangle(hDC, 4, 26, r.right - r.left - 5, r.bottom - r.top - 5);
                DeleteObject(SelectObject(hDC, old_brush));
                SelectObject(hDC, old_pen);
    
                // Titelleiste
               		old_brush = SelectObject(hDC, b_headline);
    
                    Rectangle(hDC, 2, 2, (r.right - r.left) - 2, 22);
    
                    // Text zeichnen:
                    GetWindowText(hwnd, text, 500);
                    old_font = SelectObject(hDC, f_titel);
                    SetBkMode(hDC, TRANSPARENT);		// Hintergrund des Textes auf Transparent schalten
                    SetTextColor(hDC, RGB(255, 255, 255));           
    
                    TextOut(hDC, 24, 1, text, strlen(text));
    
                    SelectObject(hDC, old_font);
                    SelectObject(hDC, old_brush);
    
                EndPaint(hwnd, &ps);
            } 
            break;
    

    Alles funktioniert bestens nur oben genannter Fehler tritt auf!



  • Hast du bei der WNDCLASS bzw. WNDCLASSEX auch CS_VREDRAW und CS_HREDRAW angegeben?



  • Ja hab ich das hilft ned!


  • Mod

    Das kann nicht gehen, weil Du Dein Rectanngle immer nur links oben in der Ecke zeichnest an den Koordnaten 0,0. Die Koordinaten des Paint RECTs können jedoch an anderen Ursprüngen liegen!


  • Mod

    BTW: Warum zeichnest Du Deinen Hintergrund in WM_PAINT und nicht in WM_ERASEBKGND.


Anmelden zum Antworten