HBRUSH 释放? 回帖有分! brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); brush=(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,brush); DeleteObject((HGDIOBJ)brush);为什么我创建的brush释放不掉,我每秒调用下上面的代码,过几秒内存就增加一点,为什么?哪个地方写错啦?恳请赐教,最好写个简单例子,参考下,不胜感激! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr); DeleteObject(brush); 试一下Create 一个全局的HBRUSH 看看还有问题不。。 HBRUSH 要定义全局的在初始化的时候Create之后不要再调用CreateSolidBrush函数了 mem DC也没delete吧?如果是memdc,也要:DeleteDC();如果是Get来的就要ReleaseDC(). brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); brush=(HBRUSH)SelectObject(hDC,brush);//brush 已经不再是你创建的那个brush了 ........ SelectObject(hDC,brush);//这里的返回值也许还是你创建的那个brush-》brush=(HBRUSH)SelectObject(hDC,brush); DeleteObject((HGDIOBJ)brush); void MyDraw::Draw(){ HDC hDC=::GetDC(hHwnd); HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0)); FillRect(hDC,CRect(0,0,96,96),brush); DrawMyPic(hDC); DeleteObject(brush); ReleaseDC(hHwnd,hDC);}void DrawMyPic(hDC:HDC){ brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr); DeleteObject(brush); } 下面用setTimer调用,就这么简单的过程,怎么可能内存在每隔10秒左右就增加4呢,而且蛮有规律的.一直加下去,特奇怪!void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime){ MyDraw iDraw; iDraw.Draw();}void CModelClockDlg::OnButton1() { int nTimerID=::SetTimer(NULL,NULL,1000,TimerProc);}请大虾帮忙分析下,到地是什么环节出问题了? void MyDraw::Draw(){ HDC hDC=::GetDC(hHwnd); HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0)); FillRect(hDC,CRect(0,0,96,96),brush); // DrawMyPic(hDC); 搞掉这个不会泄漏了吧, 搞掉这个都泄漏的话,那根本问题就不是这儿的问题了. DeleteObject(brush); ReleaseDC(hHwnd,hDC);}====================================================================那么就是这个了:void DrawMyPic(hDC:HDC){ brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr); DeleteObject(brush); }这个函数有什么问题是没法子看清的.. 用任务管理器查看进程的“GDI对象”,如果数量基本不变就没问题。物理内存是系统调度,数量增加不能说明问题。 void DrawMyPic(hDC:HDC) { brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0)); HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr); DeleteObject(brush); } 还有,如果你定时器内调用,建议不要经常创建与删除,所以,画刷建议用一个全局的! 同意8楼的说法,可以看看DeleteObjectd 的返回值。 求助~~~pict及pcd这两个图片文件格式的解析方法~~急~~~~ 哪里有VC++6.0英文原版下载? DSP芯片的片内外设代码自动生成软件设计(VC++实现) 执行回调的权限? 多文档模板问题~~ 新手问题:编译中出现缺少lib怎么办 vc++ 的初学者首先该看那本书呢? 初学问题,怎样删除VC中的类 钩子问题,我改了十几天了,还是不行,大家给看看吧,救命!! OLE与COM问题?? 在写一个服务器,应该一直保持用户的连接吗? 关于状态栏的SetIcon函数和窗口类的SetIcon函数的疑问
HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr);
DeleteObject(brush);
DeleteDC();如果是Get来的就要ReleaseDC().
brush=(HBRUSH)SelectObject(hDC,brush);//brush 已经不再是你创建的那个brush了 ........ SelectObject(hDC,brush);//这里的返回值也许还是你创建的那个brush-》brush=(HBRUSH)SelectObject(hDC,brush);
DeleteObject((HGDIOBJ)brush);
void MyDraw::Draw()
{
HDC hDC=::GetDC(hHwnd);
HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0));
FillRect(hDC,CRect(0,0,96,96),brush); DrawMyPic(hDC); DeleteObject(brush);
ReleaseDC(hHwnd,hDC);
}void DrawMyPic(hDC:HDC)
{
brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));
HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr);
DeleteObject(brush);
}
下面用setTimer调用,就这么简单的过程,怎么可能内存在每隔10秒左右就增加4呢,而且蛮有规律的.一直加下去,特奇怪!void CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)
{
MyDraw iDraw;
iDraw.Draw();
}void CModelClockDlg::OnButton1()
{
int nTimerID=::SetTimer(NULL,NULL,1000,TimerProc);
}请大虾帮忙分析下,到地是什么环节出问题了?
{
HDC hDC=::GetDC(hHwnd);
HBRUSH brush=(HBRUSH)CreateSolidBrush(RGB(0,0,0));
FillRect(hDC,CRect(0,0,96,96),brush); // DrawMyPic(hDC); 搞掉这个不会泄漏了吧, 搞掉这个都泄漏的话,那根本问题就不是这儿的问题了. DeleteObject(brush);
ReleaseDC(hHwnd,hDC);
}====================================================================那么就是这个了:void DrawMyPic(hDC:HDC)
{
brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));
HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr);
DeleteObject(brush);
}这个函数有什么问题是没法子看清的..
{
brush=(HBRUSH)CreateSolidBrush(RGB(255,255,0));
HBRUSH hOldbr =(HBRUSH)SelectObject(hDC,brush); ........ SelectObject(hDC,hOldbr);
DeleteObject(brush);
}
还有,如果你定时器内调用,建议不要经常创建与删除,所以,画刷建议用一个全局的!