Grafiken zeichnen



  • hallo,
    wollte heute ein wenig mit grafiken herumprobieren und dabei sind mir so manche sachen aufgefallen die mir nicht zusagen 🙂

    wenn ich eine grafik in WM_PAINT zeichne dann wir diese grafik ja jedes mal neu gezeichnit abwohl es nicht unbedingt notwenig ist und es flackert auch ein wenig.

    hab ich mir gedacht , lass ich die grafik nur einmal zeichen was aber zur folge hat das beim mini bzw. maximieren die grafik weg ist.

    nun ich stell ich mir die frage , wie ich das am besten realisiere wenn ich nicht will das die grafik andauernd neu gezeichnet werden soll.

    mfg markus



  • BeginPaint() und EndPaint(). Schonmal was von gehört?



  • Ich verweise immer gern auf dieses Tutorial:

    http://www.germandevnet.de, unter Knowledgebase ist ein WinAPI-Tutorial

    cya 🙂



  • Bei diesem Tutorial schauderts mir nur noch.
    Tut mir ja leid, aber da sind solche Klopper drin 😞
    Z.B. WM_PAINT-Zweig nur mit "return 0;"

    AUWEIA!

    Den Autor interessiert es auch absolut nicht sein Tutorial zu überarbeiten..



  • Jetzt muss ich schon mal dumm fragen, weil ich hab mit diesem Tutorial angefangen *bitte_nicht_hauen*. Was stimmt daran nicht:

    // ...
    case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hDC = BeginPaint(hWnd,&ps);
    
            // ...
    
            EndPaint(hWnd,&ps);
            return 0;
        } break;
    // ...
    

    thx & cya 🙂



  • Ich bezeihe mich hierauf:

    http://www.germandevnet.de/html/faq/cpp/winapi/einf.htm

    Schau mal was da steht beim WM_PAINT? 😕 😮 😡

    Fehler sind dazu da gemacht zu werden, aber sie selbst nach Hinweisen darauf
    nicht zu korrigieren ist schon schlimm. 😞



  • Da hast du Recht... das ist nicht so toll... ich verweise in Zukunft nur noch auf amazon.de -> Petzold ;).

    cya 🙂



  • hehe, der Endy ist halt CS süchtig geworden, da vergißt man schonmal seine Tutorials zu updaten. 😉



  • Original erstellt von TKool:
    **Bei diesem Tutorial schauderts mir nur noch.
    Tut mir ja leid, aber da sind solche Klopper drin 😞
    Z.B. WM_PAINT-Zweig nur mit "return 0;"

    AUWEIA!

    Den Autor interessiert es auch absolut nicht sein Tutorial zu überarbeiten..**

    Jo, und geile Rechtschreibfehler sind dabei. Aber mal ganz ehrlich: was ist an dem return(0) falsch? Muss da auch Begin- und EndPaint() hin, auch wenn nichts gezeichnet wird? Oder ist es falsch, weil die DefWindowProc nicht aufgerufen wird? 😕



  • Ohne BeginPaint und EndPaint landest du in einer Endlosschleife, weil der ungültige Bereich, der gezeichnet werden soll (Grund für den Aufruf von WM_PAINT) nie als gültig markiert wird!
    DefWindowProc macht soviel ich weiß auch einfach nur ein BeginPaint/EndPaint!



  • Sehe ich das dann richtig, dass Begin/EndPaint() nur dazu da ist, um den ungültigen Bereich wieder gültig zu machen? Wusste nämlich nie, wozu das da ist, und habe es immer nur brav geschrieben, ohne zu wissen warum.



  • So steht zumindest in der MSDN-Library! Es mach aber noch mehr, z.B. Clipping!

    The BeginPaint function automatically sets the clipping region of the device context to exclude any area outside the update region. The update region is set by the InvalidateRect or InvalidateRgn function and by the system after sizing, moving, creating, scrolling, or any other operation that affects the client area. If the update region is marked for erasing, BeginPaint sends a WM_ERASEBKGND message to the window.



  • Danke, flenders.


Anmelden zum Antworten