在需要实现绘制的地方(比如说如果做动画,最典型的就是在View的OnTimer中):
CDC *pDC = GetDC();
CDC memDC;
CBitmap memBmp, *pOldBmp;
CRect rc;
GetClientRect(rc);
memDC.CreateCompatibleDC(pDC);
memBmp.CreateCompatibleBitmap(pDC, rc.Width(), rc.Height());
pOldBmp = memDC.SelectObject(&memBmp);
memDC.FillSolidRect(rc, RGB(0, 128, 0));  //绘制前先清理
....//在memDC上作图
pDC->BitBlt(rc.left, rc.top, rc.Width(), rc.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBmp);
memBmp.DeleteObject();
memDC.DeleteDC;
ReleaseDC(pDC);
如果你的View不经常变动的话,更好的办法是:
1。将memDC与memBitmap做成全局变量或成员变量;
2。在View初始化时(比如,OnInitUpdate),用CreateCompatibleXXX初始化memDC与memBitmap,并将后者选入前者;
3。在OnDraw中加入一句话,就是上面的BitBlt(当然,GetClientRect也必须有);
4。作图时,直接在memDC上绘制(绘制前可能需要用FillRect清理),然后GetDC,取到屏幕DC,然后调用OnDraw复制到屏幕上(当然也可以用BitBlt),最后ReleaseDC;
5。View销毁时,用DeleteDC与DeleteObject销毁memDC与memBitmap。
这样,额外增加了OnDraw处理的功能,使程序的绘制不会在重绘时丢失;而且不必每次绘制时都取得memDC、memBitmap,减少了系统开销。