松鼠的博客

导航

CListCtrl防闪烁

思路:
(1)绘制需要显示项的背景
(2)在内存中绘制项,然后再将内存中的项数据绘制到屏幕上

BOOL CListCtrl2::OnEraseBkgnd(CDC* pDC) 
{
    
return false;
}


WM_PAINT响应代码:

void CListCtrl2::OnPaint() 
{
    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();
}

 

posted on 2008-12-11 15:43  Xproer-松鼠  阅读(1338)  评论(0)    收藏  举报