GDI Objekte wieder entfernen...
-
Jochen Kalmbach schrieb:
Zeichen tut man immer in WM_PAINT!!!
1. Frage: Warum?
2. Frage: Dann ist doch das Rechteck schon gezeichnet bevor ich den button drücke?
-
1. Weil das genzeichnet sonst z.B: verschwindet, wenn Du das Fenster Minimierst/maximierst oder mit einem anderen Fenster kurz überdeckt wird
2. WAS Du in WM_PAINT zeichnest ist ja Dir überlassen; Du kannst dort auch erst ein Rechteck zeichnen wenn irgendwelche andere Bedingungen erfüllt wurden (z.B. Button gedrückt)
-
Jochen Kalmbach schrieb:
1. Weil das genzeichnet sonst z.B: verschwindet, wenn Du das Fenster Minimierst/maximierst oder mit einem anderen Fenster kurz überdeckt wird
2. WAS Du in WM_PAINT zeichnest ist ja Dir überlassen; Du kannst dort auch erst ein Rechteck zeichnen wenn irgendwelche andere Bedingungen erfüllt wurden (z.B. Button gedrückt)
zu 1. Du hast recht!

zu 2. wenn ich z.B. das schreibe passiert garnix in WM_PAINT:
if(LOWORD(wParam) >= 32 && LOWORD(wParam) <= 59 ) { logBrush.lbStyle = BS_HOLLOW; hPen = CreatePen(PS_SOLID, 2, RGB(0,0,0)); hBrush = CreateBrushIndirect(&logBrush); SelectObject(hdc, hPen); SelectObject(hdc, hBrush); Rectangle(hdc, 263, 102, 444, 300); DeleteObject(hPen); DeleteObject(hBrush); }
-
Bitte lies die Doku zu WM_PAINT...
Du musst BeginPaint/EndPaint verwenden....
-
hmm.. finde da nix darüber

und BeginPaint/EndPaint is ja auch dabei. geht aba trozdem net
-
Dann erkläre mal was der Quatch mit dieser Prüfung soll:
if(LOWORD(wParam) >= 32 && LOWORD(wParam) <= 59 ) {In WM_PAINT hat so etwas sicherlich ncihts zu suchen!
Ansonsten zeige uns Deinen ganzen Code für WM_PAINT...
-
also,
das soll bedeuten, das wenn ein button mit einer ID zwischen 32 und 59 gedrückt wird.
das in der schleife gemacht werden soll. in WM_COMMAND hat das so funktioniert.
in WM_PAINT sieht es jetzt so aus:case WM_PAINT: hdc = BeginPaint(hWnd, &ps); if(LOWORD(wParam) >= 32 && LOWORD(wParam) <= 59 ) { logBrush.lbStyle = BS_HOLLOW; hPen = CreatePen(PS_SOLID, 2, RGB(0,0,0)); hBrush = CreateBrushIndirect(&logBrush); SelectObject(hdc, hPen); SelectObject(hdc, hBrush); Rectangle(hdc, 263, 102, 444, 300); DeleteObject(hPen); DeleteObject(hBrush); } EndPaint(hWnd, &ps); break;
-
Hmm.... was für eine Bedeutung hat den wParam in WM_PAINT!?
-
Jochen Kalmbach schrieb:
Hmm.... was für eine Bedeutung hat den wParam in WM_PAINT!?
ja das wird da garnicht benutzt

mit switch(message) gehts auch nicht.
-
okay. habe alles verstanden.
noch eine frage zu InvalidateRect.
ich brauche einen Pointer auf eine RECT-Struktur.
wenn die variable von RECT rect ist, dann ist doch rect der Pointer oder?
nur wenn ich das einsetzte wird der Fehler:"rect" nicht mit "const rect" kompatibel oder so ähnlich.
-
&rect
-
metapoint2011 schrieb:
"rect" nicht mit "const rect" kompatibel oder so ähnlich.
Ist es eigentlich zuviel verlangt, wenigstens die genauen Fehlermeldungen zu posten?
Hintergrund: Wenn du die Fehlermeldung genau gelesen und dir eventuell ein paar Gedanken darüber gemacht hättest, wäre dein Post wohl überflüssig.
InvalidateRect erwartet einen Zeiger auf eine RECT-Struktur, das const garantiert, dass die Member dieser Struktur nicht verändert werden.Was du wahrscheinlich machst:
RECT rect; // Member setzen InvalidateRect(hwnd, rect, 0); // &rect wäre richtig
-
Man kann auch einfach NULL übergeben. Dann wird das ganze Fenster neu gezeichnet.
-
ja das stimmt. nur dann tut jedesmal das ganze fenster so zucken..
alle zahlen, das sind auch alles selbstgezeichnete buttons. das ist nämlich ein terminkalender.
wenn ich z.b einen timer mach mit ner uhr, dann tut das jede sekunde so flackern.
auf jeden fall gehts mit &rect.
-
Dann musst du dir double buffering angucken.
-
Nein! Das muss er nicht. er sollte einfachnur das disablen was auch notwendig ist und nicht das ganze Parent...
In 95% aller Fälle ist Doublebuffering nicht notwendig.
Schon gar nicht, wenn man ein Fenster hat, das auch mehreren Child-Windows zusammengesetzt ist.
Da hat jedes Fenster seinen einen DC...
-
Wenn du Invalidate gemacht hast, musst du das mit Validate auch wieder rückgängig machen!