求助:VC++ 推箱子 游戏源码,有部分看不懂,请高手赐教!!
本人在网上下载了一个推箱子小游戏的源代码,是四川大学--计算机科学系97级的--韩学为写的,因为我要移植代码到WINCE平台上,但里面有部分代码看不懂,所以,特向各位高手求救。(此代码有可能被其他人重新命过名,但它的显著特征是:需要Map.dat和MoveWay.dat 才能运行,有个独立的思考线程),希望看过此代码的高手们不吝赐教!!谢谢!!
问题:在程序BoxmanClass.cpp中有个DrawIt(cha x ,cha y)函数,最后那部分不是很明白,它为何要2个DC来绘画?(mapDC)的作用又是什么?同样的DrawAllMap里面也是这样,请告诉我?
代码:
CClientDC dc(m_pDrawWnd);
//there must use CClientDC, can't use CPaintDC.
//but I don't know why?
CBitmap tB;
tB.LoadBitmap( IDB_MAP );
CDC tDC;
tDC.CreateCompatibleDC( &dc );
tDC.SelectObject( &tB );
dc.BitBlt( x*m_size, y*m_size, m_size, m_size, &tDC, index*m_size, 0, SRCCOPY );
CDC mapDC;
mapDC.CreateCompatibleDC( &dc );
CBitmap* pOB = mapDC.SelectObject( &m_mapB );
mapDC.BitBlt( x*m_size, y*m_size, m_size, m_size, &tDC, index*m_size, 0, SRCCOPY );//从缓冲DC--tDC拷贝到mapDC中
mapDC.SelectObject( pOB );
在Paint函数里面:
CClientDC dc(m_pDrawWnd);
CDC mapDC;
mapDC.CreateCompatibleDC( &dc );
CBitmap* pOB = mapDC.SelectObject( &m_mapB );
dc.BitBlt( 0, 0, m_size * m_mapsizex, m_size * m_mapsizey, &mapDC, 0, 0, SRCCOPY );
mapDC.SelectObject( pOB );
……………mapDC的作用是什么?假如我把屏幕DC--dc改成我自己定义的内存DC--myMemDC 可不可以?