CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

奇怪问题,请教高手!

楼主sufon(是网不是站)2005-02-01 22:32:25 在 VC/MFC / 基础类 提问

本人做了一个程序,用到好些自定义的控件类。程序编译时没有出错,可执行文件启动之后也运行正常,但长时间运行之后(使用或者不使用都是这样)会出现整个界面变白的情况,而且不响应消失。更奇怪的是,不是每次都会出现这种问题。请各位帮忙分析一下!谢谢 问题点数:100、回复次数:17Top

1 楼meiyululu(璐璐)回复于 2005-02-01 22:39:48 得分 5

可能你没正确处理好WM_PAINT   ,WM_ERASEBK   消息。Top

2 楼sufon(是网不是站)回复于 2005-02-01 23:12:45 得分 0

能详细点吗?Top

3 楼fengbaotiaorulei(风暴跳如雷)回复于 2005-02-02 03:12:14 得分 0

有源代码吗?Top

4 楼saliors(正在学习中)回复于 2005-02-02 07:41:36 得分 0

嗯,关注一下Top

5 楼holyeagle(一杯清茶)回复于 2005-02-02 07:47:32 得分 10

有一种可能就是不断使用了大量的GDI对象但没有释放,造成资源溢出,检查是否有申请过大的CBitmap,CDC及其相关资源是否释放Top

6 楼coolaka(Snow)回复于 2005-02-02 08:39:03 得分 10

你的资源用了之后没有释放  
  一个系统   的资源是有限的  
  所以会出现你上面的问题  
  用了DC你要release用了pen,bitmap之类的都要记住恢复以前的  
  把现在的释放掉Top

7 楼LongLongAgoImBoy(ThereIsAMe)回复于 2005-02-02 08:41:26 得分 5

楼主看看你界面变白以后,系统资源情况,估计是内存泄漏。Top

8 楼LongLongAgoImBoy(ThereIsAMe)回复于 2005-02-02 08:42:43 得分 0

奇怪的是,不是每次都会出现这种问题  
  ==================================  
  那很可能是因为时间还没有到,我想只要时间长一点,界面都会变白的。Top

9 楼Practise_Think(时代“过客”)回复于 2005-02-02 09:25:21 得分 10

你的程序有GDI资源泄漏,我以前也遇过这样的问题,如果你在2k用任务管理器可以看到GDI会随着时间不断增加,不过有时在9X泄漏,而在2K或XP就不存在这种情况了.检查你有关GDI方面的代码,Top

10 楼kwiner(ak.net)回复于 2005-02-02 11:43:38 得分 5

检查内存泄漏Top

11 楼fanqing(火影忍者+28%(准备学习进程/线程))回复于 2005-02-02 12:33:54 得分 0

关注Top

12 楼legendhui(秋天的叶子)回复于 2005-02-02 12:40:10 得分 0

upTop

13 楼sufon(是网不是站)回复于 2005-02-02 18:41:18 得分 0

谢谢,大家,继续讨论!Top

14 楼sufon(是网不是站)回复于 2005-02-02 18:46:45 得分 0

经过测试发现这个程序有问题,  
   
  HBRUSH   CSFormView::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)  
  {  
  HBRUSH   hbr   =   CFormView::OnCtlColor(pDC,   pWnd,   nCtlColor);  
  //   TODO:     在此更改   DC   的任何属性  
  switch   (pWnd->GetDlgCtrlID())  
  {  
  case   IDC_STATIC:  
  case   IDC_DRINKPRICEV:  
  case   IDC_DRINKPRICEN:  
  case   IDC_DRINKAMOUNTV:  
  case   IDC_DRINKAMOUNTN:  
  case   IDC_DEVEPRICEV:  
  case   IDC_DEVEPRICEN:  
  case   IDC_DEVEAMOUNTV:  
  case   IDC_DEVEAMOUNTN:  
  case   IDC_RAWMATPRICEN:  
  case   IDC_RAWMATAMOUNTV:  
  case   IDC_RAWMATAMOUNTN:  
  case   IDC_OTHERPRICEV:  
  case   IDC_OTHERPRICEN:  
  case   IDC_OTHERAMOUNTV:  
  case   IDC_OTHERAMOUNTN:  
  case   IDC_TOTALPRICESV:  
  case   IDC_TOTALPRICESN:  
  pDC->SetBkMode(TRANSPARENT);  
  return   CreateSolidBrush(RGB(239,239,252));  
  break;  
  default:  
  break;  
  }  
  //   TODO:     如果默认的不是所需画笔,则返回另一个画笔  
  if   (nCtlColor==CTLCOLOR_DLG)   return   (HBRUSH)   m_brush.GetSafeHandle()   ;  
  //HBRUSH   SPB   =   CreateSolidBrush(RGB(255,182,227));  
  return   hbr;  
  }  
   
  而且只要把return   CreateSolidBrush(RGB(239,239,252));删除就不会出现以上问题,问各位怎么修改这段程序?Top

15 楼Imagist()回复于 2005-02-02 19:37:17 得分 20

return   CreateSolidBrush(RGB(239,239,252));  
  HBRUSH   SPB   =   CreateSolidBrush(RGB(255,182,227));  
  你创建了刷子(2处),但你一直没有释放占有的资源。  
   
   
   
   
   
  Top

16 楼Imagist()回复于 2005-02-02 19:40:46 得分 20

解决办法,声明2个HBRUSH对象,在构造函数中创建,在析构函数中释放资源  
  DeleteObject(...);Top

17 楼JerryGR(紫咖啡)回复于 2005-02-02 21:39:17 得分 15

你创建的Brush没有释放掉,会造成GDI资源的浪费,建议改成成员变量m_brXXX;先创建m_brXXX,然后直接返回它的句柄即可  
   
  该结贴了:)  
  Top

相关问题

  • 奇怪,奇怪
  • 奇怪,奇怪!
  • 奇怪奇怪???
  • 奇怪!奇怪
  • 奇怪奇怪...........?????...........
  • 奇怪!奇怪!真奇怪!!!
  • 奇怪奇怪真奇怪
  • 奇怪???奇怪??奇怪???
  • 奇怪奇怪真奇怪。
  • 奇怪奇怪奇怪................

关键词

  • idc
  • 界面
  • case idc
  • 释放
  • 资源
  • 奇怪
  • 变白
  • hbrush
  • createsolidbrush
  • gdi

得分解答快速导航

  • 帖主:sufon
  • meiyululu
  • holyeagle
  • coolaka
  • LongLongAgoImBoy
  • Practise_Think
  • kwiner
  • Imagist
  • Imagist
  • JerryGR

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo