我在网上看到这样的一篇文章,如下
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是什么,在哪生成的呀
谢谢
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是什么,在哪生成的呀
谢谢
通过CreateCompatibleDC来创建,之后选入一副兼容位图,绘图工作都在该DC上完成
bmp.CreateCompatibleBitmappBackDC=dc.CreateCompatibleDCdc是客户区DC就行了,用CClientDC
m_List.InsertItem(0,"");
m_List.SetImageList(&m_imagelist,LVSIL_SMALL);