我在网上看到这样的一篇文章,如下
2.2重绘。在重绘中都要使用到这样一个函数:CDC类成员函数BitBlt 。原型为BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop )。该函数将一个位图从源设备描述表拷贝到CDC的设备描述表中。2.2.1原理1:设置一个后台设备环境。所有的绘图工作都在后台完成,然后通过BitBlt 函数拷贝到当前设备环境。这种方法要求后台每次都全部重绘,包括坐标、字符说明、曲线等。2.2.2应用举例:在OnTimer 函数中每隔一定时间进行重绘。void CDrawView::OnTimer(UINT nIDEvent){       // TODO: Add your message handler code here and/or call default       DrawPicture();      // 画图函数}void CDrawView::DrawPicture(){    pBackDC->PatBlt(0,0,winx, winy, PATCOPY);       //画坐标轴及刻度       DrawCoordinate(pBackDC ,BLACKPEN, MainWindowLeft,MainWindowBottom - MAINHEIGHT, MainWindowLeft + MAINWIDTH, MainWindowBottom);       //标出x坐标刻度值       WriteCoordinateX(pBackDC, BLACKPEN, MainWindowLeft,MainWindowLeft + MAINWIDTH, MainWindowBottom);       //标出y坐标刻度值       WriteCoordinateY(pBackDC,BLACKPEN,MainWindowLeft,MainWindowBottom );       //输出实际宽度值       WriteMessage(pBackDC,MainWindowLeft,MainWindowBottom,MAINHEIGHT );    if ( pBackDC != NULL )       {//画曲线图       DrawGraph(pBackDC,REDPEN,MainWindowLeft+MAINWIDTH,MainWindowBottom);             CDC *pDC = GetDC();              if (pDC != NULL)              {//调用OnDraw()函数,将曲线图显示在屏幕中                     OnDraw(pDC);                         ReleaseDC(pDC);              }       }}void CDrawView::OnDraw(CDC* pDC){       CDrawDoc* pDoc = GetDocument();       ASSERT_VALID(pDoc);       // TODO: add draw code for native data here       if (pDC != NULL)              pDC->BitBlt(0,0,winx, winy, pBackDC, 0, 0, SRCCOPY);}
我有几个疑问不明白
1:他说设置一个后台设备环境,这个该怎么设置啊
2:pBackDC是什么,在哪生成的呀
谢谢

解决方案 »

  1.   

    他说的就是个内存DC,
    通过CreateCompatibleDC来创建,之后选入一副兼容位图,绘图工作都在该DC上完成
      

  2.   

    CBitmap bmp;
    bmp.CreateCompatibleBitmappBackDC=dc.CreateCompatibleDCdc是客户区DC就行了,用CClientDC
      

  3.   

    还有还有,那个DrawGraph在哪,在这报错
      

  4.   

    DrawGraph是你自己的画曲线函数
      

  5.   

    可以了,少加了
    m_List.InsertItem(0,"");
    m_List.SetImageList(&m_imagelist,LVSIL_SMALL);