免费预览已结束,剩余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) return 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);/获得控件所在矩形区域ScreenToClient(&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.CreateCompatibleDC(&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.Height(),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,rcclient.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;CFile 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) /锁定分配内存块 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_Width(&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 hGlobal=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_IPicture,(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.GetLength()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);/在内存中画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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 冷库设备租用协议书
- 兼职执业药师协议书
- 广东城乡规划设计研究院2025招考易考易错模拟试题(共500题)试卷后附参考答案
- 养老服务培训协议书
- 写作基地挂牌协议书
- 安徽滁州市定远县2025年下半年下半年部分事业单位招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 养鸡合作写合同范本
- 核酸检测卡合同范本
- 国防科技大学理学院物理系实验物理教研室招考(湖南长沙)易考易错模拟试题(共500题)试卷后附参考答案
- 机材料外包合同范本
- 催收投诉处罚管理制度
- 2025-2030年中国it服务外包行业市场发展前景及趋势预测与投资分析研究报告
- 建材采购合同协议
- 严禁操办违规酒席宣传教育课件
- 温室大棚项目可行性研究报告(仅供参考)
- 酒店动火作业管理制度
- 2024年成都市郫都区卫生健康局招聘基层卫生类人员真题
- T-CNCIA 01037-2024 电子工业用高纯二氧化钛
- 第11课预防食物中毒
- 教学课件:《航海学》
- 《阿迪达斯品牌介绍》课件
评论
0/150
提交评论