用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, 我已经不用了.

相关文章:

  • 2022-02-08
  • 2022-01-08
  • 2021-06-09
  • 2021-07-10
  • 2021-11-26
  • 2022-12-23
  • 2021-06-01
猜你喜欢
  • 2021-07-24
  • 2021-08-10
  • 2021-12-16
  • 2021-12-08
  • 2021-07-24
  • 2021-07-02
  • 2021-09-15
相关资源
相似解决方案