Powered by Invision Power Board


  Reply to this topicStart new topic

> double buffer
zero_cool
geschrieben am: 19.11.2008, 00:26
Quote Post





Gruppe: Mitglieder
Beiträge: 1
Mitglieds-Nr.: 711
Mitglied seit: 19.11.2008





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


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);


Beitrag bearbeitet von zero_cool am 19.11.2008, 00:28
PMEmail Poster
Top
Cookman
geschrieben am: 19.11.2008, 12:45
Quote Post





Gruppe: Mitglieder
Beiträge: 854
Mitglieds-Nr.: 6
Mitglied seit: 02.09.2004



Du musst das Neuzeichnen des Hintergrunds verhindern (WM_ERASEBKGND abfangen) und ihn dafür selbst immer wieder zeichnen (einfach den Hintergrund des Fenster mit FillRect(...) o.ä. füllen). Dann verschwindet das Flackern.
PMEmail Poster
Top
1 Besucher zu diesem Thema (1 Gäste und 0 'versteckte' Mitglieder)
0 Mitglied(er):

Topic Options Reply to this topicStart new topic

 



[ DB Queries: 11 ]   [ Execution Time: 0.0643 ]   [ GZIP aktiviert ]