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

如何在CStatic上面的某一个区域显示一个图(图在本地的硬盘上,是一个文件)(急)

楼主princesshan(小青蛇)2006-03-02 17:51:00 在 VC/MFC / 界面 提问

如何在CStatic上面的某一个区域显示一个图(图在本地的硬盘上,是一个文件)  
  就是一个CStatic我要在不同的区域显示不同的图,*.bmp,或者*.jpg图,  
  请问如何实现,最好能有可实现的例子代码,谢谢 问题点数:20、回复次数:10Top

1 楼JetLuo(JetLuo)回复于 2006-03-02 20:37:38 得分 10

我写的一个派生于CStatic的类,很简单.其中CxImage是另一个显示图片的类;  
   
   
  //   CImageFrm   window  
   
  class   CImageFrm   :   public   CStatic  
  {  
  //   Construction  
  public:  
  CImageFrm();  
   
  //   Attributes  
  private:  
  CxImage   m_Image;  
  BOOL   m_bPerHWRatio;  
   
  //   Operations  
  public:  
  void   SetShowMode(BOOL   bPerHWRatio){   m_bPerHWRatio=bPerHWRatio;   }  
  void   SetImage(CxImage   &Image);  
  CxImage   *GetImage(){return   &m_Image;}  
   
  //   Overrides  
  //   ClassWizard   generated   virtual   function   overrides  
  //{{AFX_VIRTUAL(CImageFrm)  
  //}}AFX_VIRTUAL  
   
  //   Implementation  
  public:  
  virtual   ~CImageFrm();  
   
  //   Generated   message   map   functions  
  protected:  
  //{{AFX_MSG(CImageFrm)  
  afx_msg   void   OnPaint();  
  afx_msg   void   OnDestroy();  
  //}}AFX_MSG  
   
  DECLARE_MESSAGE_MAP()  
  };  
   
  CImageFrm::CImageFrm()  
  {  
  m_bPerHWRatio=FALSE;  
  }  
   
  CImageFrm::~CImageFrm()  
  {  
  }  
   
   
  BEGIN_MESSAGE_MAP(CImageFrm,   CStatic)  
  //{{AFX_MSG_MAP(CImageFrm)  
  ON_WM_PAINT()  
  ON_WM_DESTROY()  
  //}}AFX_MSG_MAP  
  END_MESSAGE_MAP()  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CImageFrm   message   handlers  
   
  void   CImageFrm::SetImage(CxImage   &Image)  
  {  
  m_Image.Copy(Image);  
  Invalidate(FALSE);  
  }  
   
  void   CImageFrm::OnPaint()    
  {  
  CPaintDC   dc(this);   //   device   context   for   painting  
   
  CRect   rc;  
  GetClientRect(rc);  
   
  if(!m_Image.IsValid())  
  {  
  dc.Rectangle(&rc);  
  return;  
  }  
  int   nHeight=m_Image.GetHeight();  
  int   nWidth=m_Image.GetWidth();  
   
  if(m_bPerHWRatio)  
  {  
  CRect   rcShow;  
  double   dRatio=nWidth/(double)nHeight;  
  CSize   newSize;  
  newSize.cy   =   rc.Height();  
  newSize.cx=(int)(newSize.cy*dRatio);  
  if(newSize.cx   >   rc.Width())  
  {  
  newSize.cx   =   rc.Width();  
  newSize.cy=   (int)(newSize.cy/dRatio);  
  rcShow.left=0;rcShow.right=newSize.cx;  
  rcShow.top=(rc.Height()-newSize.cy)/2;  
  rcShow.bottom=rcShow.top+newSize.cy;  
  }  
  else  
  {  
  rcShow.top=0;rcShow.bottom=newSize.cy;  
  rcShow.left=(rc.Width()-newSize.cx)/2;  
  rcShow.right=rc.left+newSize.cx;  
  }  
  dc.Rectangle(&rc);  
  m_Image.Stretch(dc.m_hDC,rcShow,SRCCOPY);  
  }  
  else  
  {  
  m_Image.Stretch(dc.m_hDC,rc,SRCCOPY);  
  }  
   
  }  
   
  void   CImageFrm::OnDestroy()    
  {  
  if(m_Image.IsValid())  
  m_Image.Destroy();  
   
  CStatic::OnDestroy();  
  }  
  Top

2 楼princesshan(小青蛇)回复于 2006-03-03 16:10:40 得分 0

顶,楼上的CxImage   的源代码没有,怎么用阿?  
  没有其他的实现方法了吗?谢谢Top

3 楼Snow_Ice11111(雪上加冰)回复于 2006-03-04 01:22:25 得分 5

CxImage用在这里太浪费了,太庞大了,占资源。  
  http://community.csdn.net/Expert/topic/4505/4505149.xml?temp=.7063867Top

4 楼junliu_0(驴子)回复于 2006-03-04 08:17:57 得分 0

CWnd   *pWnd=GetDlgItem(IDC_STATIC);//取得控件句柄  
  CDC   *pDC=pWnd->GetDC();  
  //加载位图并显示  
  CBitmap   bitmap;  
  HBITMAP   hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),"C:\\*.bmp",  
  IMAGE_BITMAP,0,0,LR_LOADFROMFILE);             //载入位图  
  //if(hbmp=NULL)   return   FALSE;                                                        
  bitmap.Detach();                                                         //分离关联的位图对                                                        
  bitmap.Attach(hbmp);                                                 //将载入的位图与bitmap关联起来  
   
  CRect   r;  
  pDC->GetClientRect(&r);  
  CDC   dcMem;  
  dcMem.CreateCompatibleDC(pDC);                             //创建与pDC兼容的设备上下文  
          dcMem.SelectObject(&bitmap);                                 //将位图对象选入设备上下文  
  //从源设备上下文复制位图到目标设备上下文  
  //pDC->BitBlt(0,0,100,100,&dcMem,0,0,SRCCOPY);  
  BITMAP   BM;  
  bitmap.GetBitmap(   &BM   );  
  pDC->StretchBlt(  
        0,  
        0,  
        r.Width(),  
        r.Height(),  
        &dcMem,  
        0,  
        0,  
        BM.bmWidth,  
        BM.bmHeight,  
        SRCCOPY    
  );  
   
  bitmap.DeleteObject();Top

5 楼JetLuo(JetLuo)回复于 2006-03-04 20:23:01 得分 0

楼上的,人家要能显示JPG  
  如果要CxImage,发Email给我:jetjsp@126.comTop

6 楼princesshan(小青蛇)回复于 2006-03-07 16:13:34 得分 0

怎么显示一个jpg图阿,没有人会吗?Top

7 楼unionize(同盟会)回复于 2006-03-07 16:15:42 得分 0

先用CImage转成BMP然后BitBltTop

8 楼slayer530(首席看客)回复于 2006-03-07 22:00:52 得分 5

试试CPixtureEx,网上去搜个控件类,很好用,gif动画都可以显示Top

9 楼billy145533($_$)回复于 2006-03-07 22:08:04 得分 0

gdi+Top

10 楼JetLuo(JetLuo)回复于 2006-03-07 22:37:21 得分 0

CxImage   功能很强大,各种格式几乎通吃  
  //   CxImage   supported   formats  
  #define   CXIMAGE_SUPPORT_BMP   1  
  #define   CXIMAGE_SUPPORT_GIF   1  
  #define   CXIMAGE_SUPPORT_JPG   1  
  #define   CXIMAGE_SUPPORT_PNG   1  
  #define   CXIMAGE_SUPPORT_MNG   0  
  #define   CXIMAGE_SUPPORT_ICO   1  
  #define   CXIMAGE_SUPPORT_TIF   1  
  #define   CXIMAGE_SUPPORT_TGA   1  
  #define   CXIMAGE_SUPPORT_PCX   1  
  #define   CXIMAGE_SUPPORT_WBMP   1  
  #define   CXIMAGE_SUPPORT_WMF   1  
  #define   CXIMAGE_SUPPORT_J2K   0 //   Beta,   use   JP2  
  #define   CXIMAGE_SUPPORT_JBG   0 //   GPL'd   see   ../jbig/copying.txtTop

相关问题

  • 读取本地硬盘中的文件
  • 查找硬盘文件代码
  • 硬盘文件格式不认了!!
  • 直接写硬盘比在硬盘上些文件快吗?
  • 硬盘文件丢失 (紧急求助,文件恢复)
  • 搜索整个硬盘的文件,查找*.rm文件。
  • 怎样列出硬盘中的文件或文件夹
  • 如何实现硬盘格式的转换而不影响硬盘文件?
  • 求救:怎样找回我的硬盘文件?我的文件丢失了!
  • 如何把硬盘上的文件映射为虚拟光驱文件?

关键词

  • 区域
  • virtual
  • cimagefrm
  • bperhwratio
  • cstatic
  • cximage
  • define cximage
  • 图
  • dcmem
  • 显示

得分解答快速导航

  • 帖主:princesshan
  • JetLuo
  • Snow_Ice11111
  • slayer530

相关链接

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

广告也精彩

反馈

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