如何正确释放GDI资源?

时间:2015-11-03 11:01:45

标签: c winapi gdi

我正在努力了解如何正确释放GDI资源,这是我认为在阅读了许多GDI教程之后的工作方式:

假设我创建了一个内存DC,并创建并选择了许多GDI对象(HPENHBRUSHHBITMAP等)。现在要释放GDI资源,我会做以下事情:

  1. 将所有旧的GDI对象选择到内存DC中(因此 选择所有新创建的GDI对象。)
  2. 删除新创建的GDI对象。
  3. 删除内存DC。
  4. 请注意,第二步和第三步可以按相反顺序执行。也就是说,为GDI对象删除了内存DC。

    如果我正在使用普通DC(我使用GetDC()BeginPaint()),我会替换删除DC而只是释放它。

    我做对了,还是我错过了什么?

1 个答案:

答案 0 :(得分:1)

  
      
  1. 将所有旧的GDI对象选择到内存DC中(因此   选择所有新创建的GDI对象。)
  2.   
  3. 删除新创建的GDI对象。
  4.   
  5. 删除内存DC。
  6.         

    请注意,第二步和第三步可以按相反顺序执行。也就是说,为GDI对象删除了内存DC。

         

    我做对了吗?

是的,你做到了。

  

如果我正在使用普通DC(我使用GetDC()BeginPaint()),我会替换删除DC而只是释放它。

好吧,GetDC将与ReleaseDC匹配,BeginPaint将与EndPaint匹配。至于GetDC,请注意documentation中的以下内容:

  

使用公共DC绘制后,必须调用ReleaseDC函数以释放DC。不必发布类和私有DC。

相关问题