VC中图像控件的用法与总结_第1页
VC中图像控件的用法与总结_第2页
VC中图像控件的用法与总结_第3页
VC中图像控件的用法与总结_第4页
VC中图像控件的用法与总结_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用picture控件动态显示图片方法一 控件适应于图片尺寸添加一个picture控件,修改id为idc-picture,并添加一cbitmap m_bmp成员变量在oninitdialog()函数中添加如下代码if(m_bmp.m_hobject!=null) m_bmp.deleteobject();/以绝对路径加载bmp图片hbitmap hbmp=(hbitmap):loadimage(afxgetinstancehandle(),1.bmp,image_bitmap,0,0,lr_createdibsection | lr_loadfromfile);if(hbmp=null) re

2、turn false;/获得加载位图的文件信息m_bmp.attach(hbmp);dibsection ds;bitmapinfoheader &bminfo=ds.dsbmih;/获得位图信息图m_bmp.getobject(sizeof(ds),&ds);int cx=bminfo.biwidth;/获得位图宽度int cy=bminfo.biheight;/获得位图高度/该段程序根据图象的宽和高,调整控件大小,让它正好显示一张图片crect rect;getdlgitem(idc_pictrue)-getwindowrect(&rect);/获得控件所在矩形区域screentoclie

3、nt(&rect);getdlgitem(idc_pictrue)-movewindow(rect.left,rect.top,cx,cy,true);/调整控件大小在onpaint()函数中添加如下代码/三种方法获得pictrue控件dc,图象将被绘制在控件上cpaintdc dc(getdlgitem(idc_pictrue);/cpaintdc dc(this);/cdc dc;/dc.m_hdc=:getdc(null);crect rcclient;getdlgitem(idc_pictrue)-getclientrect(&rcclient);cdc memdc;memdc.cre

4、atecompatibledc(&dc);cbitmap bitmap;bitmap.createcompatiblebitmap(&dc,rcclient.width(),rcclient.height();memdc.selectobject(&bitmap);cwnd:defwindowproc(wm_paint,(wparam)memdc.m_hdc,0); cdc maskdc;maskdc.createcompatibledc(&dc);cbitmap maskbitmap;maskbitmap.createbitmap(rcclient.width(),rcclient.heig

5、ht(),1,1,null);maskdc.selectobject(&maskbitmap);maskdc.bitblt(0,0,rcclient.width(),rcclient.height(),&memdc,rcclient.left,rcclient.top,srccopy);cbrush brush;brush.createpatternbrush(&m_bmp);dc.fillrect(rcclient,&brush);dc.bitblt(rcclient.left,rcclient.top,rcclient.width(),rcclient.height(),&memdc,rc

6、client.left,rcclient.top,srcpaint);brush.deleteobject();二 图片适用于控件尺寸 添加一个picture控件,修改id为idc-picture在onpaint()函数中添加如下代码cwnd *pwnd=getdlgitem(idc_pictrue);/获得pictrue控件窗口的句柄crect rect;pwnd-getclientrect(&rect);/获得pictrue控件所在的举行区域cdc *pdc=pwnd-getdc();/获得pictrue控件的dcistream *pstm;cfilestatus fstatus;cfil

7、e file;long cb;ipicture *ppic;/定义显示图片的接口(可显示jpg格式图片)cstring m_spath=1.bmp;/设置想要显示的图片/打开图象文件,获取文件字节数if(file.open(m_spath,cfile:moderead) & file.getstatus(m_spath,fstatus) & (cb=fstatus.m_size)!=-1) /分配全局存储空间 hglobal hglobal=globalalloc(gmem_moveable,cb); lpvoid pvdata=null; if(hglobal!=null) /锁定分配内存块

8、 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_xsize_himetric hmheight; ppic-get_wid

9、th(&hmwidth);/获得图象真实宽度 ppic-get_height(&hmheight);/获得图象真实高度 /在控件上显示图片 ppic-render(*pdc,0,0,rect.width(),rect.height(),0,hmheight,hmwidth,-hmheight,null); ppic-release();图片显示通用模块首先为类添加如下两个函数和一个成员变量ipicture* m_ppicture;/图片加载函数hresult loadfrombuffer(byte *pbuff, int nsize)bool bresult=false;hglobal hgl

10、obal=globalalloc(gmem_moveable,nsize);/分配内存空间void *pdata=globallock(hglobal);/定义图象数据指针memcpy(pdata,pbuff,nsize);globalunlock(hglobal);/释放内存空间istream *pstream=null;/定义数据流指针/创建数据流if(createstreamonhglobal(hglobal,true,&pstream)=s_ok)hresult hr;/定义返回结果if(hr=oleloadpicture(pstream,nsize,false,iid_ipictur

11、e,(lpvoid*)&m_ppicture)=s_ok)bresult=true;pstream-release();/释放数据流return bresult;/图片显示函数bool drawfromfile(cstring filename, cdc *pdc)cfile cfile;cfileexception e;/打开文件if(cfile.open(filename,cfile:moderead | cfile:typebinary,&e)byte *pbuff=new bytecfile.getlength();/定义分配内存if(cfile.read(pbuff,cfile.ge

12、tlength()0)/将文件读入缓存loadfrombuffer(pbuff,cfile.getlength();delete pbuff;/释放缓存long hmwidth,hmheight;m_ppicture-get_width(&hmwidth);m_ppicture-get_height(&hmheight);/获取图片尺寸int nwidth=muldiv(hmwidth,pdc-getdevicecaps(logpixelsx),2540);int nheight=muldiv(hmheight,pdc-getdevicecaps(logpixelsx),2540);/在内存中

13、画cdc mendc;cbitmap bmp;bmp.createcompatiblebitmap(pdc,nwidth,nheight);mendc.createcompatibledc(null);mendc.selectobject(&bmp);m_ppicture-render(mendc.m_hdc,0,0,nwidth,nheight,0,hmheight,hmwidth,-hmheight,null);/将内存中画拷贝到目的地pdc-bitblt(0,0,nwidth,nheight,&mendc,0,0,srccopy);return true;然后在onpaint()函数中显示void cdialogdlg:onpaint() cpaintdc dc(this); / device context for paintingif (isiconic()sendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getcl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论