CListCtrlシンチレーションの問題の解決

1113 ワード

リストに頻繁にデータが挿入されると、シンチレーションが発生するのは避けられません.以下では、シンチレーションを解決するために再描画を使用します.デュアルバッファを使用します.
引き継ぎWM_ERASEBKGNDメッセージは、デフォルトの処理を削除し、処理しないに変更するとfalseに戻ります.
BOOL CListCtrlEx::OnEraseBkgnd(CDC* pDC)
{
//  WM_ERASEBKGND   
 return false;
 //      
 //return CListCtrl::OnEraseBkgnd(pDC);
}

処理WM_PAINTメッセージ、自己描画を実現
void CListCtrlEx::OnPaint()
{
    //  WM_PAINT  
    CPaintDC dc(this); // device context for painting
    CRect rect;
    CRect headerRect;
    CDC MenDC;//  ID   
    CBitmap MemMap;
    GetClientRect(&rect);   
    GetDlgItem(0)->GetWindowRect(&headerRect);  
    MenDC.CreateCompatibleDC(&dc);  
    MemMap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
    MenDC.SelectObject(&MemMap);
    MenDC.FillSolidRect(&rect,RGB(228,236,243));  
    //         OnPaint(),       DC    
    DefWindowProc(WM_PAINT,(WPARAM)MenDC.m_hDC,(LPARAM)0);      
    //    
    dc.BitBlt(0,headerRect.Height(),rect.Width(),  rect.Height(),&MenDC,0, headerRect.Height(),SRCCOPY);  
    MenDC.DeleteDC();
    MemMap.DeleteObject();
}