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

求助!画图时图形突然消失!

楼主ming6424(大笨蛋100分)2004-12-01 13:48:57 在 VC/MFC / 基础类 提问

求助!画图时图形突然消失!  
   
  HBITMAP hBitmap[NUM];  
  HDC hdcMem[NUM];  
   
  LRESULT   CALLBACK   WndProc(HWND   hwnd,   UINT   message,   WPARAM   wParam,   LPARAM   lParam)  
  {  
   
  HDC hdc;  
  PAINTSTRUCT ps;  
  int i;  
   
  switch   (message)  
  {  
  case   WM_CREATE:  
  LoadBitmaps();          
  ...  
  return   0;  
  case   WM_TIMER:  
  UpdateGame();  
  return   0;  
   
  case   WM_PAINT:  
  hdc   =   BeginPaint(hwnd,&ps);  
                                         
                                      //   初始化所有的MemDC  
  InitAllHandles(hdc);  
   
                    //   绘图  
                    DrawBattle(hdc);  
   
                    //   Destroy   all   DC   objects.  
                    ReleaseAllHandles();  
   
                                      EndPaint(hwnd,&ps);  
  return   0;  
     
  case   WM_DESTROY:  
  KillTimer(hwnd,1);  
  Destroy();  
                                      PostQuitMessage(0);  
  return   0;  
  }  
  return   DefWindowProc(hwnd,message,wParam,lParam);  
  }  
   
  int   LoadBitmaps()  
  {  
  HINSTANCE   hInst;  
                    int   i;  
                     
  hInst   =   (HINSTANCE)GetWindowLong(g_hwnd);  
   
  for(i   =   0   ;i   <   NUM   ;i++)//NUM   是个宏,地图的数量  
                            hBitmap[i]   =   LoadBitmap(hInst,szBitmap[i]);  
   
  return   TRUE;  
  }  
   
  void   InitAllHandles(HDC   hdc)  
  {  
  int   i;  
   
                    //   Init   hdcMem   for   drawing  
  for(i=0;i<NUM;i++)  
  {  
  hdcMem[i]=CreateCompatibleDC(hdc);  
  SelectObject(hdcMem[i],hBitmap[i]);  
  }  
   
  }  
  void   ReleaseAllHandles(void)  
  {  
  int   i;  
  for(i=0;i<NUM;i++)  
  DeleteDC(hdcMem[i]);  
   
  }  
   
  int   Destroy()  
  {  
  int   i;  
   
  for(i=0;i<NUM;i++)  
  {  
  DeleteObject(hBitmap[i]);  
  }  
   
  return   TRUE;  
  }  
   
  每个计时器时间到了后,UpdateGame更新程序的数据(地形,位置等),然后DrawBattle就根据这些数据来画图,程序的运行时间可能会很长!  
   
  在测试的时候,发现有时程序运行久了,会有某些(不是全部)图片画不出来,请问大家是什么原因???  
  若是hBitmap的值中途发生变化,又可能是哪些原因造成的??? 问题点数:50、回复次数:6Top

1 楼nuaawenlin(飘人)回复于 2004-12-01 15:04:43 得分 20

void   ReleaseAllHandles(void)  
  {  
  int   i;  
  for(i=0;i<NUM;i++)  
  {  
                                      SelectObject(hdcMem[i],oldbitmap[i]);  
  DeleteDC(hdcMem[i]);  
  }  
   
  }  
  Top

2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-01 15:12:37 得分 15

典型的GDI资源泄漏。  
  HBITMAP   hOldBitmap=SelectObject(hdcMem[i],hBitmap[i]);  
  ....  
  SelectObject(hdcMem[i],hOldBitmap);  
  Top

3 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-12-01 15:14:41 得分 15

or:  
  ...  
  case   WM_PAINT:  
  hdc   =   BeginPaint(hwnd,&ps);  
                                      //   初始化所有的MemDC  
  InitAllHandles(hdc);  
   
                    //   绘图  
  int   nSaveDC=SaveDC(hdc);  
                    DrawBattle(hdc);  
  RestoreDC(hdc,nSaveDC);  
   
                    //   Destroy   all   DC   objects.  
                    ReleaseAllHandles();  
                                      EndPaint(hwnd,&ps);  
  return   0;  
  ...  
  Top

4 楼aoosang(智慧的鱼)回复于 2004-12-01 15:23:35 得分 0

接分Top

5 楼zxwitsme(Program is an art!)回复于 2004-12-01 15:33:43 得分 0

gzTop

6 楼ming6424(大笨蛋100分)回复于 2004-12-01 15:53:29 得分 0

不知道能不能详细地讲解一下???Top

相关问题

  • 如何在memo里画图形?
  • 如何在桌面上画图形?
  • 图画图形高手请进
  • 怎样在asp.net中画图形
  • 怎样在一个Jpanel上画图形?
  • 如何使用Timage的Canvas画图形并移动图形?
  • 请问什么地方有编程需要的动画图形??
  • Delphi高手们请入......画图形(100分以上)
  • 怎样在windows桌面画图形,比如一条直线??
  • 怎么样用C#在WEB页上画图形?

关键词

  • hwnd
  • hdc
  • destroy
  • wparam
  • lparam
  • case wm
  • message

得分解答快速导航

  • 帖主:ming6424
  • nuaawenlin
  • DentistryDoctor
  • DentistryDoctor

相关链接

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

广告也精彩

反馈

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