[WINAPI] narysowana grafika psuje sie po Resize okna

0
 case WM_SIZE:
                   if (wParam == SIZE_RESTORED)
                   {  
                       if(bufor){
                 hdc = BeginPaint( hwnd, &ps );
                    int color, colr, colg, colb;
                    draw_to_hdc( hdc,bufor, 0, 0);
                    for (int x=0; x<bufor->w; x++)
                    {
                      for (int y=0; y<bufor->h; y++)
                      {
                          color = getpixel(bufor, x, y);
                          colr = getr(color);
                          colg = getg(color);
                          colb = getb(color);
                          
                          putpixel(bufor, x, y, makecol(255-colr,255-colg,255-colb));
                      } 
                    }
                     draw_to_hdc( hdc,bufor, 0, bufor->h+10 );
                    EndPaint( hwnd, &ps ); 
                    
                    }       
                   }

Witam, mam taki kod odpowiadający za operacje na grafice, niestety po zmianie rozmiaru okna, maksymalizacji ect grafika się psuje.
Co mam zrobione źe, ewentualnie co muszę dopisać w reszcie kodu programu.
Pozdrawiam

0

BeginPaint wywołuje się w zdarzeniu WM_PAINT

0

ja potrzebuje wywołać w WM_COMMAND ponieważ chcę aby grafika się wczytała po naciśnieciu przycisku w menu.
Jak to można "połączyć" z WM_PAINT ?
pozdrawiam

0

mam teraz tak WM_PAINT:

    case WM_PAINT: /*Jeśli coś się nam zamaże to odmalowujemy*/
                if(bufor){
                PAINTSTRUCT ps;
                PALETTE palette;
                 hdc = BeginPaint( hwnd, &ps );
                    int color, colr, colg, colb;
                    draw_to_hdc( hdc,bufor, 0, 0);
                
                     
                   EndPaint( hwnd, &ps ); 
                    
                    }
                    
                    
                break;

Grafika psuje się przy zmianie rozmiaru, zakryciu okna innym programem ect co jest nie tak??

0

Poprawka, teraz przedstawiam cały kod z WM_PAINT, służy do tworzenia negatywów bmp.
Jak go poprawić aby grafika się nie zamazywała?

case WM_PAINT: /*Jeśli coś się nam zamaże to odmalowujemy*/
                if(bufor){
                PAINTSTRUCT ps;
                PALETTE palette;
                 hdc = BeginPaint( hwnd, &ps );
                    int color, colr, colg, colb;
                    draw_to_hdc( hdc,bufor, 0, 0);
                    for (int x=0; x<bufor->w; x++)
                    {
                      for (int y=0; y<bufor->h; y++)
                      {
                          color = getpixel(bufor, x, y);
                          colr = getr(color);
                          colg = getg(color);
                          colb = getb(color);
                          
                          putpixel(bufor, x, y, makecol(255-colr,255-colg,255-colb));
                      } 
                    }
                     draw_to_hdc( hdc,bufor, 0, bufor->h+10 );
                     
                    EndPaint( hwnd, &ps ); 
                    
                    }
                    
                    
                break;
0

Łatwiej będzie stworzyć dynamicznie kontolkę STATIC z odpowiednimi flagami i wrzucić do niej bitmapę. Co do tematu - jak chcesz bez WM_PAINT, to zamiast BeginPain/EndPaint użyj GetDC/ReleaseDC.

0

ok z tym sobie już poradziłem ;)
Mam inny problem: dlaczego nie widać w moim programie komunikatów MessageBox oraz no błędu przy zapisie pliku. Struktura okna:

 hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Negatyw Obrazu",       /* Title Text */
           WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           800,                 /* The programs width */
           600,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           hMenu,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

Proszę o pomoc.

Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1