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!
-
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!
-
BTW: Warum zeichnest Du Deinen Hintergrund in WM_PAINT und nicht in WM_ERASEBKGND.