



免费预览已结束,剩余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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京初三道法开卷考试及答案
- 董秘资格考试题库及答案
- 聊城中考试题及答案
- 电热毯取暖知识培训总结课件
- 高架桥施工知识培训课件
- 电液控pp液压支架培训课件
- 电池起火消防安全知识培训课件
- 高考历史考试题及答案:战国时期贵州夜郎国的“夜郎自大”典故与实际规模
- 高考历史考试题及答案:隋唐时期扬州的经济地位(“扬一益二”)
- 高考历史考试题及答案:改革开放后湖南长沙工程机械产业(如三一重工)的崛起
- 5.3 一元一次方程的应用 七年级数学北师大版(2024)上册课时优化训练(含答案)
- 血透管路滑脱应急预案
- 医疗纠纷防范培训
- 2024版《糖尿病健康宣教》课件
- 《大学》原文全文无删减版
- 资产并购咨询合同模板
- 字画作品买卖合同模板
- 口腔护理操作评分标准框架
- 人教PEP版小学英语五年级下册复习教案(全册)
- 2024年初中数学人教版七年级上册新教材培训心得体会
- NB-T 33025-2020 电动汽车快速更换电池箱通.用要求
评论
0/150
提交评论