主要代码如下:
        
        //得到除任务栏的桌面大小
        ::SystemParametersInfo(SPI_GETWORKAREA,0,m_rcDeskTop,0); m_memDC=new CDC; m_bitmap=new CBitmap; m_nbmSize=0; m_bitmap->LoadBitmap(IDB_BOARD);
m_bitmap->GetBitmap(&m_bm); m_nbmWidth=m_bm.bmWidth;//得到位图宽度
m_nbmHeight=m_bm.bmHeight;//得到位图高度 m_wdc=new CWindowDC(NULL); m_memDC->CreateCompatibleDC(m_wdc); m_bitmap->m_hObject=::LoadImage(NULL,"skinboard.bmp",IMAGE_BITMAP,
m_nbmWidth,m_nbmHeight,LR_LOADFROMFILE); m_memDC->SelectObject(m_bitmap);        //上面都是加载和拷贝位图的基本操作
        //在OnTimer函数中,通过不断增加m_nbmSize来移动位图
        void CTestDlg::OnTimer(UINT nIDEvent) 
        {
            m_nbmSize++;                 m_wdc->BitBlt(m_rcDeskTop.right-m_nbmWidth-30,m_rcDeskTop.bottom-m_nbmSize,
m_nbmWidth,m_nbmSize,m_memDC,0,0,SRCCOPY);            CDialog::OnTimer(nIDEvent);        }          问题:位图移动后,有拖影,请问应该怎么解决此问题?请教各位大虾!!

解决方案 »

  1.   

    双缓冲,先在内存DC中绘图,在贴到设备DC
      

  2.   

    你没把以前画的擦掉,当然会有拖影。
    绘图的操作挪到OnDraw里,在OnTimer里Invalidate
      

  3.   

    我使用的是对话框,没有OnDraw函数,难道应该把绘图的操作放到OnPaint()函数中?
      

  4.   

    Invalidata(TRUE)
    刷新下啊放在ontimer里看看,每秒刷新
    画图部分放在onpaint里面
      

  5.   

    要刷新你的桌面啊,用这个试试看
    ::InvalidateRect(0,NULL,0);
      

  6.   

    位移增量知道的,
    每次画图计算下会有拖影的区域,
    用InvalidateRect