GDI Objekte wieder entfernen...


  • Mod

    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
    

  • Mod

    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.


  • Mod

    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!


Anmelden zum Antworten