windows系统DC只能GetDC, 但我们可以 自己建DC。借过来的(GetDC )要还回去(RealeaseDC),自己创建的(CreateDC )要自己删除它(DeleteDC )。GetDC 和 GetClientDC 是从系统预留的若干个 DC 当中获得一个目前尚未使用的设备环境。所以,应该注意如下两点:
1. 在使用完成一个由 GetDC 返回的设备环境之后,应该尽快调用 ReleaseDC 释放。
2.避免同时使用多个设备上下文,并避免在递归函数中调用 GetDC 和 GetClientDC。
例子:
CPaintDC dc(this);
CDC MemDC;
CBitmap bitmap;
BITMAP m_bitmap;
bitmap.LoadBitmap(IDB_MAIN);
bitmap.GetBitmap(&m_bitmap);
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&bitmap);
dc.BitBlt(0,0,m_bitmap.bmWidth,m_bitmap.bmHeight,&MemDC,0,0,SRCCOPY);
bitmap.DeleteObject();
MemDC.DeleteDC();
上面这段代码是显示一副位图,CPaintDC是通过调用构造函数得到的,CPaintDC dc(this);它里面其实也就调用了GetDC方法,所以最后的析构函数也调用了ReleaseDC。MemDC是我们自己创建的兼容DCMemDC.CreateCompatibleDC(&dc);,所以用完后需要我们自己删除,MemDC.DeleteDC();。