CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

请问下面的源程序文件为什么会报错?

楼主feiyond(天宇飞扬)2005-05-05 13:01:41 在 .NET技术 / VC.NET 提问

其实具体的代码也没有什么错误,都是从书上抄下来的。就是不知道为什么会有错?就一个错误:文件意外结束。请各位指点!  
  //dib.cpp  
  #include   "stdafx.h"  
  #include   "MyCap.h"  
  #include   "Dib.h"  
   
  #ifdef   _DEBUG  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]=__FILE__;  
  #define   new   DEBUG_NEW  
  #endif  
   
   
  //   CDib  
   
  CDib::CDib()  
  {  
  }  
  CDib::~CDib()  
  {  
  }  
   
   
   
   
  //   CDib   成员函数  
  int   CDib::LoadBmp(LPCSTR   filename)  
  {  
  CFile   file(filename,CFile::modeRead|CFile::shareDenyNone);  
  WORD   bfType;  
  DWORD   bfSize;  
  file.Read(&bfType,sizeof(WORD));  
  file.Read(&bfSize,sizeof(DWORD));  
  if(bfSize<=0)  
  {  
  file.Close();  
  return   -1;  
  }  
  //是否BMP  
  if(bfType!=((WORD)'M'<<8)+'B'))  
  {  
  file.Close();  
  return   -1;  
  }  
  DWORD   bfOffBits;  
  //找到位图数据起始偏移并读入  
  file.Seek(2*   sizeof(WORD),CFile::current);  
  file.Read(&bfOffBits,sizeof(DWORD));  
  LPVOID   DibBuf;  
  DibBuf=(LPVOID)new   char[bfSize];  
  if(DibBuf==NULL)  
  {  
  file.Close();  
  return   -1;  
  }  
  //读入位图数据  
  file.Read(DibBuf,bfSize);  
  file.Close();  
  LPBITMAPINFO   pBMI;  
  int   size=bfOffBits-14;  
  pBMI=(LPBITMAPINFO)new   char[sizeof(BITMAPINFOHEADER)+256*   sizeof(RGBQUAD)];  
  //生成信息头  
  memcpy(pBMI,DibBuf,size);  
  LPVOID   lpBits=(LPVOID)((LPSTR)DibBuf+size);  
  //创建位图  
  CreateDibIndirect(pBMI,lpBits);  
  delete   pBMI;  
  delete   DibBuf;  
  return   1;  
  }  
  BOOL   CDib::CreateDibIndirect(LPBITMAPINFO   pBMI,const   void*   lpBits)  
  {  
  if(m_hObject!=NULL)  
  {  
  DeleteObject();  
  }  
  CDC   *pDC=new   CDC;  
  pDC->CreateCompatibleDC(NULL);  
  LPVOID   pBits;  
  HBITMAP   hDIB=::CreateDIBSection(pDC->GetSafeHdc(),pBMI,DIB_RGB_COLORS,&pBits,NULL,0);  
  delete   pDC;  
  ASSERT(hDIB);  
  ASSERT(pBits);  
  Attach(hDIB);  
  SetDIBBits(GetWidthBytes()   *   GetHeight(),lpBits);  
  return   TRUE;  
  }  
  int   CDib::SaveBmp(LPCSTR   filename)  
  {  
  BITMAPFILEHEADER   hdr;  
  CFile   file(filename,CFile::modeWrite|CFile::modeCreate);  
  //文件头  
  hdr.bfType=((WORD)'M'<<8)+'B';  
  LPBITMAPINFO   pbi=GetBitmapInfo();  
  PBITMAPINFOHEADER   pbih=(PBITMAPINFOHEADER)   pbi;  
  hdr.bfSize=(DOWRD)   (sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed   *   sizeof(RGBQUAD)+pbih->biSizeImage);  
  hdr.bfReserved1=0;  
  hdr.bfReserved2=0;  
  hdr.bfOffBits=(DWORD)   sizeof(BITMAPFILEHEADER)+pbih->biSize+pbih->biClrUsed   *   sizeof(RGBQUAD);  
  //写入文件头  
  file.Write((LPVOID)   &hdr,sizeof(BITMAPFILEHEADER));  
  //写入信息头  
  file.Write((LPVOID)   pbih,sizeof(BITMAPINFOHEADER)+pbih->biClrUsed   *sizeof(RGBQUAD));  
  //写入数据  
  int   nTotal=pbih->biSizeImage;  
  LPVOID   lpBits=GetBits();  
  file.Write(lpBits,nTotal);  
  //关闭文件  
  file.Close();  
  delete   pbi;  
  return   1;  
  }  
  void   CDib::Show(CWnd   *pWnd)  
  {  
  HDC   hdc=::GetDC(pWnd->m_hWnd);  
  HBITMAP   bmp=HBITMAP(m_hObject);  
  HDC   hdcmem=::CreateCompatibleDC(hdc);  
  ::SelectObject(hdcmem,bmp);  
  ::BitBlt(hdc,0,0,GetWidth(),GetHeight(),hdcmem,0,0,SRCCOPY);  
  ::DeleteObject(bmp);  
  }  
  BOOL   CDib::CaptureDib(CWnd   *pWnd,const   CRect&   capRect)//捕捉窗口图像    
  {  
  BOOL   ret=false;  
  if(pWnd==NULL)  
  return   false;  
  CDC   *   pPlayDc=pWnd->GetDC();  
  if(pPlayDc==NULL)  
  return   false;  
  CRect   Rect;  
  if(capRect.IsRectEmpty())  
  pWnd->GetClientRect(Rect);  
  else  
  Rect=capRect;  
  //得到图像颜色数  
  UINT   nBitCount=pPlayDc->GetDeviceCaps(BITSPIXEL);  
  //创建位图  
  if(CreateDib(Rect.Width(),Rect.Height(),nBitCount))  
  {  
  //得到位图显示设备上下文  
  CDC   *   pCopyDc=GetDC();  
  if(pCopyDc==NULL)  
  {  
  pWnd->ReleaseDC(pPlayDc);  
  return   false;  
  }  
  pWnd->ShowWindow(SW_SHOW);  
  if(pCopyDc->BitBlt(0,0,Rect.Width(),Rect.Height(),pPlayDc,0,0,SRCCOPY))  
  ret=true;  
  ReleaseDC(pCopyDc);  
  }  
  pWnd->ReleaseDC(pPlayDc);  
  return   ret;  
  }  
   
   
   
  问题点数:50、回复次数:1Top

1 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-05-05 13:34:14 得分 50

调用的位置是否正确包含头文件Top

相关问题

  • Turbo C2.0 提示源程序文件太大,我怎么办?
  • c源程序怎样做成**.exe文件???
  • 谁有读取cad文件的java源程序?谢谢了!
  • 怎样用jb7将源程序编译成exe文件?
  • ****谁有用MD5对文件加密的源程序?
  • 求一个BCB读,写,修改.ini文件的源程序
  • MFC中如何使用.c源程序文件
  • delphi源程序文件能不能用命令行编译?
  • Python里怎样运行源程序文件?(请高手别笑)
  • 求文件内容查找和替换汇编源程序,急!!!

关键词

  • 文件
  • hdr
  • word
  • null
  • cdib
  • pbih
  • cfile
  • pwnd
  • hdcmem
  • lpbits

得分解答快速导航

  • 帖主:feiyond
  • oyljerry

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

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