Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Избежать мерцания при перерисовке


Автор: Podarochek 28.2.2009, 18:46
Рисую прямоугольник...при перерисовке жутко мерцает... почитал вот метод буферизации через контекст памяти, вот что получилось, помоему следовал букве закона..но мерцает дальше...помогите..

Код


case WM_PAINT: 
        { 
            RECT rect;    
            GetClientRect(hWnd,&rect);
            
            hdc=BeginPaint(hWnd,&ps);
            
            HDC hdcMEM=CreateCompatibleDC(hdc);
                    
            HBITMAP hbmp=CreateCompatibleBitmap(hdc,rect.right,rect.bottom);
            HBITMAP hbmpOld=(HBITMAP)SelectObject(hdcMEM,hbmp);
                        
            HBRUSH hbr=(HBRUSH)GetStockObject(BLACK_BRUSH);
            HBRUSH hbrOLD=(HBRUSH)SelectObject(hdcMEM,hbr);
            
            Rectangle(hdcMEM,100,100,500,500);
            
            BitBlt(hdc,0,0,400/*rect.right*/,400/*rect.bottom*/,hdcMEM,0,0,SRCCOPY);
            
            SelectObject(hdcMEM,hbmpOld);
            DeleteObject(hbmp);
            
            SelectObject(hdcMEM,hbrOLD);
            DeleteObject(hbr);
            
            ReleaseDC(hWnd,hdcMEM);
            EndPaint(hWnd, &ps); 
 
        } 


Автор: ИванМ 28.2.2009, 22:59
Пользуйся OpenGL или DirectDraw/Direct3D. Тогда точно не будет мерцать

Автор: 586 28.2.2009, 23:41
Попробуй перехватить WM_ERASEBKGND.

Автор: Podarochek 1.3.2009, 21:04
перехвачу я его и что с ним делать?

Автор: 586 1.3.2009, 22:21
Код
case WM_ERASEBKGND:
    return FALSE;   // или TRUE

Автор: Andrey44 2.3.2009, 08:02
ИванМ,  smile что-бы просто нарисовать квадрат?
Код

case WM_ERASEBKGND:
    return TRUE;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)