Re[2]: Windows API Tab Control flickering
От: WoldemaR Россия  
Дата: 12.07.04 14:34
Оценка:
Здравствуйте, Dervish, Вы писали:

D>Если рассматривать именно TabControl, то мерцание в нём происходит по традиционным причинам: этот контрол честно отрабатывает сообщения WM_ERASEBKGND и WM_PAINT. Двойная буферизация в реализации этого контрола не предусмотрена.


Достаточно обеспечить атомарность обработки WM_ERASEBKGND и WM_PAINT, без двойной буферизации.

LRESULT CALLBACK CWrapperTab::TabCtrlSubclassProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    if (uMsg == WM_ERASEBKGND)
        return 0;
    if (uMsg == WM_PAINT)
    {
        ::ValidateRect(hWnd, NULL);

        HDC hControlDC = ::GetDC(hWnd);

        CallWindowProc(pTabControlProc, hWnd, WM_ERASEBKGND, (WPARAM)hControlDC, 0);
        CallWindowProc(pTabControlProc, hWnd, WM_PRINTCLIENT, (WPARAM)hControlDC, PRF_CLIENT);

        ::ReleaseDC(hWnd, hControlDC);

        return 0;
    }
    return CallWindowProc(m_pTabProc, hWnd, uMsg, wParam, lParam);
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.