首先:
HDC
CDC
对于以上代码,通过FromHandle得到的 CDC 不可以释放. FromHandle 是通过 HDC 来创建了一个 CDC 对象,以方便操作,释放 DC 的操作应该针对于 HDC
这两者是指向的一个DC对象,只能释放一次,而这个释放应该针对 hDC 而非 pDC.
然后:
GetDC和ReleaseDC的調用配對,CreateDC和DeleteDC的調用配對。
GetDC是從窗口獲取現有的DC,而CreateDC是創建DC,所以ReleaseDC和DeleteDC的作用一個是釋放,一個是銷毀.
请教关于CDC资源释放的问题。
m_HOldBmp = SelectObject( m_hMemDC, m_HBmp );
CDC *pDC = new CDC;
if (!pDC)
{
return FALSE;//函数调用多次后,在这里就返回了。
}
pDC->Attach(m_hMemDC);
//...使用pDC..代码略
pDC->Detach();
m_HBmp=(HBITMAP) SelectObject( m_hMemDC, m_HOldBmp );
return TRUE;
问题:
1.请教如何释放该CDC资源;
2.为什么反复new CDC后出错呢?
------解决方案--------------------
1.请教如何释放该CDC资源;
====================
对CDC来说,将与CDC相关的DC资源释放掉,然后用delete将这个指针释放掉
2.为什么反复new CDC后出错呢?
==========
可能是申请太多,GDI资源已经不够用了。
------解决方案--------------------
这样New CDC 的用法没试过。通常在View类里面 CDC*pDC = GetDC(); 然后 ReleaseDC(pDC); 或者在对话框里面CPaintDC dc(this);或者使用CClientDC等。你是什么项目?不是MFC项目吗?感觉这样反复new CDC不怎么合理似的。
------解决方案--------------------
Cdc获取后一定要释放,如果一直New而不delete就会内存不足而出错