定位MFC程序GDI对象泄漏过程中的一些经验

本文分享了定位MFC程序中GDI对象泄漏的经验,通过任务管理器发现GDI对象不断增加,问题出在OnTimer函数调用的SetWindowText及重写的OnCtlColor函数,未正确释放CreateSolidBrush创建的GDI对象。解决方案是创建全局画笔并在OnDestroy时释放,以避免GDI泄漏。
摘要由CSDN通过智能技术生成

定位MFC程序GDI对象泄漏过程中的一些经验

之前接触MFC比较少,最近一个程序需要使用MFC写界面。写完之后发现程序运行一段时间后异常卡顿,并且WIN7系统任务栏图标出现一些毛边等异常情况。重新运行程序,打开任务管理器发现GDI对象不断增加,且数量到达9999后程序开始异常。因此判断程序可能存在GDI对象泄漏,即创建的GDI对象没有及时释放。
鉴于GDI对象不断自动增加,判断GDI泄漏可能位于定时器触发的OnTimer函数中。OnTimer函数调用方法如下:

 LRESULT CVServerView::OnChangeTime(WPARAM wParam, LPARAM lParam)
 {
     CString strText;
     FormatTime((INT)wParam, 30, strText);
     m_editPush.SetWindowText(strText);
     return 0;
 }

可以看出函数仅仅是调用了API函数SetWindowText,理论上不应该导致GDI泄漏。但奇怪的是注释掉SetWindowText后程序就正常了。后来发现原因在于程序重写了OnCtlColor函数。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值