这是一个关于DC释放的问题,不过却花了很多时间,因为我一开始并没有把问题定位到DC。另外调用堆栈也无法定位到哪一个文件,哪一行,为什么无法定位?请看代码:
A::OnPaint()
{
CDC * pDC = GetDC();
pDC->DeleteDC();
}
显然在 pWnd->DeleteDC(); 这句有问题,应该 ReleaseDC(pDC),但是往往调用堆栈指向的是其他OnPaint,因为其他OnPaint用到这个DC时,已经在A::OnPaint()删除了。
这个时候系统不可能定位正确。下面是这个错误的截图:

winhand.cpp 文件部分截图:

本文探讨了一个关于DC释放的问题,作者最初未能准确地定位问题,并且在调用堆栈中也未找到具体的文件和行号。问题出现在OnPaint()函数中,原本应该使用ReleaseDC()来释放DC,但却误用了DeleteDC()。
497

被折叠的 条评论
为什么被折叠?



