double buffer



  • **

    Hi Leute, wenn jemand weiss wisso dass hier nicht funkzioniert dann warhe ich ihm sehr dankbar, ok na dan hier ist der source code:

    **

    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
                                HDC hdc, hdcMem;
                                HBITMAP hbmp, hbms;
                                PAINTSTRUCT ps;
                                BITMAP bitmap;
                                static int poz=250,pol=2,obll=1,obld=1;
    
    switch (message)
    {
    case WM_CREATE:
                                SetTimer (hwnd, ID_TIMER, 80, NULL) ;
                                char xy[3];
    return 0 ;
    
    case WM_TIMER :
    
    if(poz>450)pol=1;
                                else if(poz<5)pol=2;
                                InvalidateRect (hwnd, NULL, TRUE) ;
    return 0 ;
    
    case WM_PAINT:
                                hdc = BeginPaint(hwnd, &ps);
                                hdcMem = CreateCompatibleDC(hdc);
                                hbmp = CreateCompatibleBitmap(hdc, 500, 200);
                                hbms = CreateCompatibleBitmap(hdc, 43, 42);
    
                                hbmp = (HBITMAP)LoadImage(NULL, "slike/background.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
    if(pol==2){
        switch (obld){
                case 1:
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream1D.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                                obld+=1;
                break;
                        case 2:
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream2D.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                                obld+=1;
            break;
                        case 3:
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream3D.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
                                obld=1;
            break;}
                                itoa(poz,xy,10);
                                poz+=5;
                                }
    else if(pol==1){
        switch (obll){
                        case 1:
    
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream1L.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
                                obll+=1;
            break;
                        case 2:
    
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream2L.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
                                obll+=1;
            break;
                        case 3:
    
                                hbms = (HBITMAP)LoadImage(NULL, "slike/cream3L.bmp",
                                IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
                                obll=1;
            break;}
                                itoa(poz,xy,10);
                                poz-=5;
                }
    
                                SelectObject(hdcMem, hbmp);
                                BitBlt(hdc, 0, 0, 500, 200, hdcMem, 0, 0, SRCCOPY);
                                SelectObject(hdcMem, hbms);
                                BitBlt(hdc, poz, 125, 43, 42, hdcMem, 0, 0, SRCCOPY);
                                TextOut(hdc, poz+10, 90,xy,strlen(xy));
                                DeleteObject(hbms);
                                DeleteObject(hbmp);
                                DeleteDC(hdcMem);
                                EndPaint(hwnd, &ps);
    return 0;
    
    case WM_DESTROY:
                                PostQuitMessage (0) ;
    return 0 ;
    }
    return DefWindowProc (hwnd, message, wParam, lParam) ;
    

  • Mod

    Was hällst Du von der zusätzlichen Info, was hier nicht funktioniert?

    Kristallkugeln sind hier IMHO Mangelware. 🙂



  • ok na dan hier ist der source code:

    Ist das hier ne hotline 😃

    Was Funktioniert denn jetzt genau nicht? Zeichnet er eventuell garnicht oder flackert es trotzdem noch?? Du kannst von uns nicht erwarten das wir deinen code nach jede mögliche fehlerquelle durchforsten!



  • Martin Richter schrieb:

    Was hällst Du von der zusätzlichen Info, was hier nicht funktioniert?

    Kristallkugeln sind hier IMHO Mangelware. 🙂

    Sorry mein fehler, dass problem ist das dass Bild noch immer flickert



  • Code-Walker schrieb:

    ok na dan hier ist der source code:

    Ist das hier ne hotline 😃

    Was Funktioniert denn jetzt genau nicht? Zeichnet er eventuell garnicht oder flackert es trotzdem noch?? Du kannst von uns nicht erwarten das wir deinen code nach jede mögliche fehlerquelle durchforsten!

    sorry, das problem ist das dass Bild immer noch flickert



  • Hallo,

    im Paint - Event sollte man nichts mehr vom File nachladen müssen. Diese Daten müssen schon DA! sein, bevor das Event auftritt.

    Double Buffering - nochmals zu Gemüte: GDC zeigt eine Graphik an, in der gleichen Zeit wird eine andere Graphik in den Zwischenspeicher, eben diese Kompatible-Mem, geladen und dann nur noch geblittet. Altes Bild raus, Zwischenspeicher rein.

    So ganz wird dann dein Problem nicht gelöst sein - aber mal ein Teil 🙂

    Noch ein Tipp am Rande: Halte eine WndProc möglichst klein. Lagere aus, vielleicht in OnPaint ... etc.

    WM_PAINT : OnPaint(wParam, lParam); break;


Log in to reply