内存泄漏问题

fthislife 2013-07-11 02:24:23
下面代码是改变窗口背景的颜色,有什么问题?使用后,当拖动和移动窗口时候,查看任务管理器的GDI对象猛的增长,当达到9999时就变白死了。

HBRUSH CMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr;
if(nCtlColor==CTLCOLOR_STATIC||nCtlColor==CTLCOLOR_BTN||nCtlColor==CTLCOLOR_DLG)
{
hbr=CreateSolidBrush(RGB(125,125,255));
pDC->SetBkColor(RGB(125,125,255));
}
else
{
hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
}
return hbr;
}
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
shen_wei 2013-07-12
  • 打赏
  • 举报
回复
做全局变量。。在窗口销毁时记得释放掉。。
zgl7903 2013-07-12
  • 打赏
  • 举报
回复
用一个类的HBRUSH变量 或静态的 static HBRUSH hbr2 = CreateSolidBrush(RGB(125,125,255)); hbr = hbr2;
Eric131 2013-07-12
  • 打赏
  • 举报
回复
1 GDI windows下到10000就崩的 2 刷子用完释放了么
schlafenhamster 2013-07-12
  • 打赏
  • 举报
回复
HBRUSH hbr=0; HBRUSH CMainDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { if(nCtlColor==CTLCOLOR_STATIC||nCtlColor==CTLCOLOR_BTN||nCtlColor==CTLCOLOR_DLG) { if(!hbr) hbr=CreateSolidBrush(RGB(125,125,255)); pDC->SetBkColor(RGB(125,125,255)); } else
「已注销」 2013-07-11
  • 打赏
  • 举报
回复
1. 代码没问题, 请检查程序其他部分代码 2. (如2#)自己创建的资源,自己需要释放 3. (如3#)
你妹的特盗不 2013-07-11
  • 打赏
  • 举报
回复
有个建议 hbr=CreateSolidBrush(RGB(125,125,255)); 这个画刷是固定的 可否弄成全局变量. 直接在你的函数中使用,这样就会不创建很多次,只需要创建一次,在程序退出的时候,记得销毁这个object 就可以了 .
Eleven 2013-07-11
  • 打赏
  • 举报
回复
When you no longer need the HBRUSH object call the DeleteObject function to delete it.
1019674744 2013-07-11
  • 打赏
  • 举报
回复
hbr=CreateSolidBrush(RGB(125,125,255)); 这个导致的.给分哪. 每次CREATE的创建一个.DESTROY的时候销毁.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧