teCompatibleBitmap (hDestDC, rc.right, rc.bottom); HBITMAP hOldBitmap = ::SelectObject (hDC, hBitmap); //... 此处用hdc进行绘图 //... ::BitBlt (m_hDestDC, rc.left, rc.top, rc.Width(), rc.Height(), hDC, rc.left, rc.top, SRCCOPY); ::SelectObject (hDC, hOldBitmap);
当然,这样用起来不太方便,可以将这些操作封装到一个叫CMemDC的对象中,利用构造和析构自动进行这些操作。直接使用CMemDC还有一个好处,调试GDI时,如果图形都在内存中绘制,那么还是看不到绘图过程。 代码如果这样写:
CRect rc; GetWindowRect(&rc); #ifdef _DEBUG CPaintDC dc; #else CPaintDC cdc; CMemDC dc(cdc.m_hDC, &rc); #endif
那么就既能享受内存绘图的好处又能方便调试了。 入门篇先写到这里,以后有工夫再写进阶篇。