关于GetPixel函数多次运行后失败的有关问题

关于GetPixel函数多次运行后失败的问题
本帖最后由 houwhf 于 2014-06-04 09:25:38 编辑
使用GetPixel获取对话框固定位置的像素,多次运行后,返回0
大约9973次以后就会返回0
COLORREF GetColor(CWnd * pWnd,LONG x,LONG y)
{
CDC *pDC = pWnd->GetDC();
return pDC->GetPixel(x,y);
}


void CAsdaDlg::OnOK() 
{
// TODO: Add extra validation here
COLORREF  newColor;
int i = 0;
MSG msg;
pWnd = FindWindow(NULL,_T("asda"));//对话框标题为asda

while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
newColor=RGB(0,0,0);
newColor =  GetColor( pWnd, 0 ,0);
if(newColor ==0)
{
CString str;
str.Format("%d",i);//设置断点
MessageBox(str);

}
i++;
}
}

------解决方案--------------------
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!

------解决方案--------------------
COLORREF GetColor(CWnd * pWnd,LONG x,LONG y)
{
    CDC *pDC = pWnd->GetDC();
    return pDC->GetPixel(x,y);
// release()啊,要不gdi资源没了
}