CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

怎样在VC中显示JPG图片?

楼主ckg_VcBeginner()2006-11-10 19:35:42 在 VC/MFC / 基础类 提问

先声明我是新手。。。  
  网上找到一段关于显示JPG格式图片的代码,现在想让图片在固定的矩形块里显示并用滚动条拉动来显示整张图片。。请教高手该如何改写下面的代码》》  
   
  void   CPICView::OnDraw(CDC*   pDC)  
  {  
  CPICDoc*   pDoc   =   GetDocument();  
  ASSERT_VALID(pDoc);  
  //   TODO:   add   draw   code   for   native   data   here  
      IPicture       *pPic;            
      IStream       *pStm;            
           
      CFileStatus       fstatus;            
      CFile       file;            
      LONG       cb;            
           
      if       (file.Open("D:/test.jpg",CFile::modeRead)&&file.GetStatus("D:/test.jpg",fstatus)&&            
    ((cb       =       fstatus.m_size)       !=       -1))            
      {            
    HGLOBAL       hGlobal       =       GlobalAlloc(GMEM_MOVEABLE,       cb);            
    LPVOID       pvData       =       NULL;            
  if       (hGlobal       !=       NULL)            
    {            
  if       ((pvData       =       GlobalLock(hGlobal))       !=       NULL)            
    {            
  file.ReadHuge(pvData,       cb);            
  GlobalUnlock(hGlobal);            
  CreateStreamOnHGlobal(hGlobal,       TRUE,       &pStm);            
       
    if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,  
    (LPVOID*)&pPic)))            
  {            
          OLE_XSIZE_HIMETRIC       hmWidth;            
  OLE_YSIZE_HIMETRIC       hmHeight;            
           
    pPic->get_Width(&hmWidth);            
    pPic->get_Height(&hmHeight);            
           
  double       fX,fY;            
  fX       =       (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->  
  GetDeviceCaps(HORZSIZE)*100.0);            
  fY       =       (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->  
  GetDeviceCaps(VERTSIZE)*100.0);            
    if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))            
  AfxMessageBox("Failed       To       Render       The       picture!");            
    pPic->Release();            
    }            
    else            
    AfxMessageBox("Error       Loading       Picture       From       Stream!");            
  }            
  }            
      }            
      else            
      AfxMessageBox("Can't       Open       Image       File!");            
   
   
  } 问题点数:20、回复次数:17Top

1 楼qqwwing(草莓猪)回复于 2006-11-10 20:36:45 得分 0

汗,这个代码好乱  
   
  用到COM的东西,不太懂,想问一下楼主用的是哪一个COM库,俺也遇到JPEG解码问题,想学习学习。  
   
  不过如果楼主是想在客户区显示图片而当图片大于客户区时可以使用滚动条来拖动来浏览整个图片的话,那么和图像怎么显示无关。你可以在View类改成从CScrollView类派生,然后在OnInitialUpdate()中用SetScrollSizes()来设定滚动的范围就可以了。显示的时候会自动加上滚动条.Top

2 楼ckg_VcBeginner()回复于 2006-11-10 21:31:51 得分 0

我更不懂啊。。只是现在要做这个,被逼抄了一段。。  
  我知道你说的意思,我是打算在客户区一半显示文本,另一半用来显示这个图片,所以问的很怪了。。。  
  敢问有解决的办法吗?能否用切分窗口将这个客户区分成两部分,在另一部分中加上滚动条用来拉动显示整张图片?   如果可以   请问具体该怎么实施??  
  答完了给分啊     谢谢啦Top

3 楼qqwwing(草莓猪)回复于 2006-11-11 09:44:41 得分 0

用切分窗口可以啊,只要你现在和程序是可以正常显示。用CSlitterWnd把窗口拆成一行两列分别装入一个View类。一个就用从CScrollView派生出来的View来实现滚动显示,第二个就随便了。Top

4 楼mynamelj(风之羽翼)回复于 2006-11-11 09:46:16 得分 0

看偶的blogTop

5 楼ckg_VcBeginner()回复于 2006-11-11 16:40:22 得分 0

我按照你(qqwwing)的意思切分了窗口并新建了CPicView类,用ClassView给这个类中添加自己的菜单<显示图片(showpic)>的消息映射,在CPicView中添加了OnShowPic()函数,并使用上面显示图片的代码,运行后发现菜单<显示图片>是灰色的根本不能使用,更别提显示图片了。。  
  请问这是怎么回事?  
  我在CMainFrame中将m_bAutoMenuEnable改为FALSE,结果运行后菜单不再是灰色的了,但仍然不能使用。。。Top

6 楼begtostudy(我的CSDN博客:http://blog.csdn.net/begtostudy/)回复于 2006-11-11 18:25:35 得分 0

虽然我做图像,但是jpeg的解码我是不做,  
   
  因为网上的额太多了,很多书的例程都有,  
  我想人家做那么久了,应该比我做的好Top

7 楼widesoft()回复于 2006-11-11 19:02:59 得分 0

学习中。。  
  Top

8 楼ckg_VcBeginner()回复于 2006-11-11 19:24:03 得分 0

高手还在沉默什么呢??  
  我在线等着答案啊。。。Top

9 楼kencharles(肯.查尔斯)回复于 2006-11-11 20:25:24 得分 0

我来学习一下,顺便接点分!Top

10 楼dadi0189(冰雨)回复于 2006-11-11 20:54:51 得分 0

用一个Ipicture组件显示吧,是个COM组件,Top

11 楼ckg_VcBeginner()回复于 2006-11-11 20:57:21 得分 0

就是用的这个吧   我基本不懂   但是好像就用的这个  
  现在问题是怎么在切分后的窗体中显示出来?  
   
  //////////////////////////////////////////////////////////////  
        我按照你(qqwwing)的意思切分了窗口并新建了CPicView类,用ClassView给这个类中添加自己的菜单<显示图片(showpic)>的消息映射,在CPicView中添加了OnShowPic()函数,并使用上面显示图片的代码,运行后发现菜单<显示图片>是灰色的根本不能使用,更别提显示图片了。。  
        请问这是怎么回事?  
  我在CMainFrame中将m_bAutoMenuEnable改为FALSE,结果运行后菜单不再是灰色的了,但仍然不能使用。。。  
  //////////////////////////////////////////////////////////////Top

12 楼liuqiyc(cyiquil)回复于 2006-11-11 20:58:14 得分 0

将这个菜单<显示图片(showpic)>添加到CMainFrame中Top

13 楼ckg_VcBeginner()回复于 2006-11-11 21:09:22 得分 0

liuqiyc(cyiquil):  
        这个我知道,刚才也试了一下,添加到CMainFrame中   运行后在整个窗口中显示图片了  
  而我想要在切分后的新窗体中显示,通过拉动滚动条来全部显示。。。Top

14 楼dfkoko(xiaoyin)回复于 2006-11-11 21:10:27 得分 0

图形处理不懂?  
   
  你在网上搜搜!  
  我给你的Excel例子有问题联系我!我有好多,也有自己写的。Top

15 楼ckg_VcBeginner()回复于 2006-11-11 21:14:46 得分 0

dfkoko(xiaoyin)   :  
      我刚开始学啊大哥!要用到这个   所以想问问你们高手啊。。  
  网上搜了一天了,没有切分窗口后   怎么在新窗口中显示的。。。  
  帮我看看好吗?Top

16 楼dfkoko(xiaoyin)回复于 2006-11-11 21:24:37 得分 20

To   ckg_VcBeginner()    
   
  给你发了两个例子看看!Top

17 楼ckg_VcBeginner()回复于 2006-11-11 21:31:27 得分 0

我分不多了   先给你20分   过两天弄点分再给你  
  以后还请多多帮忙啊。。  
  最近要交作业所以就很是断章取义了     等过了这关要扎实的学   从基础搞起     麻烦你多帮帮我。。。  
  可以加我QQ   375110508Top

相关问题

关键词

得分解答快速导航

  • 帖主:ckg_VcBeginner
  • dfkoko

相关链接

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

广告也精彩

反馈

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