Re: GDI и Петзолд
От: Hsilgos Беларусь  
Дата: 04.08.05 11:41
Оценка:
Здравствуйте, SpLove, Вы писали:

SL>Помогите сделать нормальную перерисовку . Сделал как показано не ниже но все передергивается и моргает. Ещё вопрос кто-нибудь делал прокрутку по Петзолду? Как избавиться от отступа сверху?? Знаю место где оно задается но как убрать????


Чтот такое "Петзолд" я не знаю, но рисование без маргания вот

void DrawOffScreen(RECT rcPaint)
{
    PAINTSTRUCT ps;
    ::BeginPaint(hWnd, &ps);
    HDC hDC = ::CreateCompatibleDC(ps.m_hDC); 
    //HBITMAP hBmp = ::CreateCompatibleBitmap(ps.m_hDC, MaxWidth+1, MaxHeidth+1);
    HBITMAP hBmp = ::CreateCompatibleBitmap(ps.m_hDC, rcPaint.right - rcPaint.left, rcPaint.bottom - rcPaint.top);
    HBITMAP hPrevBmp = (HBITMAP)::SelectObject(hDC, hBmp);

    // Clearing 
    HBRUSH brush = CreateSolidBrush(ColorBackGround);
    HBRUSH OldBrush = (HBRUSH)SelectObject( hDC, brush);// can store brush
    ExtFloodFill(hDC,0,0,ColorBackGround,FLOODFILLBORDER);
    //DeleteObject(brush);
    //brush = CreateSolidBrush(RGB(255,255,255));
    SelectObject( hDC, brush);
    DeleteObject(brush);


    // shift origin, allows to use window client coords instead of using hBmp-relative coords
    ::SetWindowOrgEx(hDC, rcPaint.left, rcPaint.top, NULL);
    
    //////////////////////////////////////////
    // Draw here
    //////////////////////////////////////////
    ::SetWindowOrgEx(hDC, 0, 0, NULL);
    ::BitBlt(ps.m_hDC, rcPaint.left, rcPaint.top,
            rcPaint.right - rcPaint.left, rcPaint.bottom - rcPaint.top,
            hDC, 0, 0, SRCCOPY);
    ::SelectObject(hDC, hPrevBmp);
    ::DeleteObject(hBmp);
    ::DeleteDC(hDC);
    ::EndPaint(hWnd, &ps);
}
ХОЙ!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.