我在程序中显示了一条直线,通过按一按钮即可显示。
现在我不断按他,同时使用InvalidateRect(hWnd,&ClientRect,true);让程序WM_PAINT事件不断出发重绘窗口。
但是问题是按多几次后会出现异常,显示图形时显得非常卡。
但是我看任务管理器发现没有内存泄漏,我有2G内存,我再怎么按还有1G多剩余,但是就是显示有异常,请问这是为什么,怎么解决啊????????
现在我不断按他,同时使用InvalidateRect(hWnd,&ClientRect,true);让程序WM_PAINT事件不断出发重绘窗口。
但是问题是按多几次后会出现异常,显示图形时显得非常卡。
但是我看任务管理器发现没有内存泄漏,我有2G内存,我再怎么按还有1G多剩余,但是就是显示有异常,请问这是为什么,怎么解决啊????????
然后看你的程序使用的GDI对象是否一直增长,如果是,就表明有GDI对象没有泄露
case WM_PAINT:
PAINTSTRUCT ps;
BeginPaint(hWnd,&ps); if (isThin)
{
DrawLine(ps.hdc);
break;
//PrintImageToDC(szFilename,ps.hdc);
}
EndPaint(hWnd,&ps);
break;里面有一个break;导致EndPaint(hWnd,&ps);
没有执行,是不是这样的?
EndPaint(hWnd,&ps);是释放窗体资源的吧?
从你的代码上看,BeginPaint可能没有对应的EndPaint
3F的方法也要试试先
没有这个选项啊??
DrawLine只是用了一个循环画点,SetPixel(hdc, j, i, RGB(0, 0, 0));
rect.right=rect.left+pWhole->m_nWidth;
rect.bottom=rect.top+pWhole->m_nHeight;
MBlockToDC(pWhole,hdc,0,0,&rect);我用了这段代码,rect.right、rect.bottom都将会超出屏幕将我的图片绘制到屏幕,我用了
GetClientRect(hWnd, &ClientRect);
MBlockToDC(pWhole,hdc,0,0,&ClientRect);代替就没有问题了(是在一二百次点击没有问题,再多没有试过),为什么我绘制了超出屏幕的图片就会引起
GDI 对象泄漏呢?我看过参考说是自己不回收这些资源的话系统将会自动回收,但是指挥收集屏幕范围内的资源是不是这个原因呢?
那这样的花我还写了画点函数如下我在绘制是也是超出屏幕的,是不是SetPixel泄漏的资源少不大会出现我说的那个问题。
那SetPixel(hdc, j, i, RGB(0, 0, 0)); 是不是也要避免画出屏幕范围??????
不就有GDI了!
这肯定是GDI资源泄漏,不要瞎想!