做了一个自绘的波形控件,可以拖拉伸缩的。利用了BitBlt()双缓冲技术,先把要显示的图形在内存中绘制好,然后再一次性地将内存中的图形输出到屏幕上。    基本功能实现得差不多了,也实现了实时伸缩,绘制波形时也没有闪烁,但是有两个问题:    1、当拖拽对话框,波形控件大小也随之变化时,波形控件还是存在闪烁现象。    我的做法是在OnSize中先销毁原有的由CreateCompatibleBitmap函数创建的位图,再用拖拽后新的width和height创建一个新位图,在这个新位图上绘出新波形后,再在OnPaint中输出到屏幕上。    不明白的是,用了双缓冲技术,为什么在拖拽时,还是存在闪烁现象?    2、参照XP自带的“任务管理器”中的波形图,当拖拽对话框时,波形仍在继续绘制。但我的控件在拖拽时,则停止绘制,拖拽完成后,波形又从头开始绘制,先前的数据就丢失了。    我现在想做出类似XP“任务管理器”中的CPU波形控件,重点解决上面的两个问题。    不知道有没有大虾做过,给个详细的思路,多谢^_^程序:void CMyCtrl::InvalidateCtrl()
{
    GetClientRect(m_rectClient) ;//获取客户区大小
    ……
    if (m_dcGrid.GetSafeHdc() == NULL)
      {
             m_dcGrid.CreateCompatibleDC(&dc) ;
             m_bitmapGrid.CreateCompatibleBitmap(&dc, m_nClientWidth, m_nClientHeight) ;  
             m_pbitmapOldGrid = m_dcGrid.SelectObject(&m_bitmapGrid) ;      }
      else
      {
             if (m_pbitmapOldGrid != NULL)
                    m_dcGrid.SelectObject(m_pbitmapOldGrid) ;  
             m_bitmapGrid.DeleteObject();
             m_bitmapGrid.CreateCompatibleBitmap(&dc, m_nClientWidth, m_nClientHeight) ;
             m_pbitmapOldGrid = m_dcGrid.SelectObject(&m_bitmapGrid) ;
      }    ……//绘制背景、坐标、波形
    InvalidateRect(m_rectClient, FALSE) ;
}void CMyCtrl::OnPaint() 
{
      CPaintDC dc(this) ;  // device context for painting
      CDC memDC ;
      CBitmap memBitmap ;
      CBitmap* oldBitmap ; // bitmap originally found in CMemDC
 
      memDC.CreateCompatibleDC(&dc) ;
      memBitmap.CreateCompatibleBitmap(&dc, m_nClientWidth, m_nClientHeight) ;
      oldBitmap = (CBitmap *)memDC.SelectObject(&memBitmap) ;   
      if (memDC.GetSafeHdc() != NULL)
      {
             memDC.BitBlt(0, 0, m_nClientWidth, m_nClientHeight, &m_dcGrid, 0, 0, SRCCOPY) ;
             ……
             dc.BitBlt(0, 0, m_nClientWidth, m_nClientHeight, &memDC, 0, 0, SRCCOPY) ;
      }    
      memDC.SelectObject(oldBitmap) ;