我采用定时器绘制一个波形图,定时器函数如下:
void CAaView::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
CRect rect1;
pDC =GetDC();
rect1.bottom = 500;
rect1.top = 0;
rect1.left = 0;
rect1.right = 500;
         CBitmap memBitmap;
CBitmap* pOldBmp = NULL;
memDC.CreateCompatibleDC(pDC);
memBitmap.CreateCompatibleBitmap(pDC,rect1.right,rect1.bottom);
pOldBmp = memDC.SelectObject(&memBitmap);
memDC.BitBlt(rect1.left,rect1.top,rect1.right,rect1.bottom,pDC,0,0,SRCCOPY);
DrawWave(&memDC); pDC->BitBlt(rect1.left,rect1.top,rect1.right,rect1.bottom,&memDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp);
memDC.DeleteDC();
memBitmap.DeleteObject(); CView::OnTimer(nIDEvent);
}
采用这种方式绘图,其中DrawWave(&memDC)为绘图函数,如果直接绘制在单文挡区域的话,每次波形图就会重叠,但是如果绘制在对话框的picture控件里,则显示正常.请高手帮忙看看.

解决方案 »

  1.   

    在对话控件里采用了
    // 获取绘制坐标的文本框
    CWnd* pWnd = GetDlgItem(IDC_COORD);

    pWnd->GetClientRect(&rect); // 指针
    pDC = pWnd->GetDC();
    pWnd->Invalidate();
    pWnd->UpdateWindow();
    但是如果在上面程序中加上
             Invalidate();
             Updatewindow();
    那整个屏幕都是白的,没有显示啊
      

  2.   

    这么久多没有人回答啊,我已经知道了,
    是memDC.BitBlt(rect1.left,rect1.top,rect1.right,rect1.bottom,pDC,0,0,SRCCOPY);
    的问题,不应该将pDC的图象重新拷贝进memDC里面