我采用定时器绘制一个波形图,定时器函数如下:
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控件里,则显示正常.请高手帮忙看看.
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控件里,则显示正常.请高手帮忙看看.
// 获取绘制坐标的文本框
CWnd* pWnd = GetDlgItem(IDC_COORD);
pWnd->GetClientRect(&rect); // 指针
pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
但是如果在上面程序中加上
Invalidate();
Updatewindow();
那整个屏幕都是白的,没有显示啊
是memDC.BitBlt(rect1.left,rect1.top,rect1.right,rect1.bottom,pDC,0,0,SRCCOPY);
的问题,不应该将pDC的图象重新拷贝进memDC里面