用GetDC()得到的DC, 必须调用ReleaseDC()
用CreateDC()创建的DC, 必须调用DeleteDC()
两者是不能混淆的.
一种典型的错误代码如下:
CDC* pDC = GetDC();
…..
//做一些无聊的事
…..
pDC->DeleteDC(); //做了错误的事
一般情况下, 上面这个代码也能够工作, 就是有时要报一点
CHandleMap::RemoveHandle(HANDLE h)异常, 跟踪进代码也看不出啥问题.
区别:
ReleaseDC()仅是释放对DC的引用
DeleteDC()是删除DC对象, 使用GetDC()的时候, 明显的这个DC不是我们自己创建的, 使用DeleteDC()的话就会将别人(通常是MFC框架)创建的DC干掉, 这样当别人要使用自己创建的DC时, 就会产生异常 了.
ReleaseDC()恰好解决这个问题, 它仅是释放一个引用, 告诉创建者DC, 我已经不用了.