下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械维修公司商业计划书
- 酒店管理专业职业生涯规划书
- 《零基础掌握转移技术|护理操作标准化实训课件》
- 睡眠医学科专科疾病护理|临床查房专用教学资料
- 【新情境新趋势】教科版科学三年级下册学科素养评价(答案解析及设计说明)
- 跨境电商店铺选品合规性审核手册
- 关于合作协议签订的意向函3篇
- 数据泄露事情数据恢复指南
- 传统艺术探秘:中国画与书法小学主题班会课件
- 关于项目延期审批请求的催办函(8篇)
- 第四节比较做功的快慢课件2025-2026学年北师大版物理八年级下册
- 2026-2030中国可吸收生物钉市场深度调查与未来趋势研究报告
- 2026江苏南通市通州区招聘通州湾示范区安全生产专属网格员40人考试模拟试题及答案详解
- 西方哲学史试题及详解
- 初中八年级道德与法治跨学科主题教学设计:家国认知图景下的发展关切与使命建构
- 2026年二级建造师继续教育试题库及答案
- 《2026年心肺复苏和心血管急救指南》更新点解读版
- 电子商务法律法规181
- 【地理】 2025-2026学年人教版八年级地理下册期末测试题
- 学校试卷保管室管理制度
- 2026年6月大学英语四级考试真题第1套(含答案)
评论
0/150
提交评论