<转>显示图片汇总
1、用Picture控件显示图片
1、首先添加Picture控件,ID为IDC_IMG_BTM
2、定义 CBitmap* m_pBitmap;
3、导入图片,并定义ID为IDB_TEST_IMG
4、动态加载代码如下:
CStatic* pImage = (CStatic*)GetDlgItem(IDC_IMG_BTM);
m_pBitmap = new CBitmap;
m_pBitmap->LoadBitmap(IDB_TEST_IMG);
pImage->SetBitmap(HBITMAP(*m_pBitmap));
5、最后别忘了delete m_pBitmap指针。
示例(可更改图片大小):
1 1、用Picture控件显示图片 2 1、首先添加Picture控件,ID为IDC_IMG_BTM 3 2、定义 CBitmap* m_pBitmap; 4 3、导入图片,并定义ID为IDB_TEST_IMG 5 4、动态加载代码如下: 6 CStatic* pImage = (CStatic*)GetDlgItem(IDC_IMG_BTM); 7 m_pBitmap = new CBitmap; 8 m_pBitmap->LoadBitmap(IDB_TEST_IMG); 9 pImage->SetBitmap(HBITMAP(*m_pBitmap)); 10 5、最后别忘了delete m_pBitmap指针。 11 示例(可更改图片大小):
2、用DC显示图片
1 //创建DC 2 CClientDC dc(GetDlgItem(资源ID)); 3 //获取图片内容 4 BITMAP bm; 5 CBitmap* hbmp = CBitmap::FromHandle(LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1))); 6 hbmp->GetBitmap(&bm); 7 CDC dcMem; 8 //创建兼容DC 9 dcMem.CreateCompatibleDC(&dc); 10 CBitmap *pOldBitmap=dcMem.SelectObject(hbmp); 11 CRect lRect; 12 //获取Static控件的大小范围 13 m_bt_1.GetClientRect(&lRect); 14 //在Static控件上显示位图 15 //判断是否需要调整到适合画布 16 dc.StretchBlt(lRect.left, lRect.top, lRect.Width()+100, lRect.Height()+100, 17 &dcMem, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); 18 dc.SelectObject(pOldBitmap);
3、控件上显示图片
1 HBITMAP hbitmap; 2 //将pStatic指向要显示的地方 3 CStatic *pStatic = NULL; 4 //根据ID获取Static控件 5 pStatic=(CStatic*)GetDlgItem(IDC_BUTTON1); 6 //装载资源*.bmp 7 hbitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1)); 8 CBitmap hbmp; 9 hbmp.Attach(hbitmap); 10 //获取图片内容 11 BITMAP bm; 12 hbmp.GetBitmap(&bm); 13 CDC dcMem; 14 //创建兼容DC 15 dcMem.CreateCompatibleDC(GetDC()); 16 CBitmap *pOldBitmap=(CBitmap*)dcMem.SelectObject(hbmp); 17 CRect lRect; 18 //获取Static控件的大小范围 19 pStatic->GetClientRect(&lRect); 20 //在Static控件上显示位图 21 pStatic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), 22 &dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY); 23 dcMem.SelectObject(&pOldBitmap);
用这种方法可以在按钮上绘制图片
4、用com显示图片
1 #include<ocidl.h> 2 #include<olectl.h> 3 4 // lpstrFile:文件名(最好是包含路径在内) 5 // hWnd 6 // nScrWidth:输出图片的宽度 7 // nScrHeight:输出图片的高度 8 // nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸 9 10 HRESULT ShowPic(TCHAR *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) 11 { 12 HDC hDC_Temp=GetDC(hWnd); 13 14 IPicture* pPic ; 15 IStream* pStm ; 16 17 BOOL bResult ; 18 19 HANDLE hFile=NULL ; 20 DWORD dwFileSize,dwByteRead ; 21 22 //打开硬盘中的图形文件 23 hFile=CreateFile(lpstrFile,GENERIC_READ, 24 FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 25 26 if(hFile!=INVALID_HANDLE_VALUE) 27 { 28 dwFileSize=GetFileSize(hFile,NULL); 29 //获取文件字节数 30 31 if(dwFileSize==0xFFFFFFFF) 32 return E_FAIL ; 33 } 34 else 35 { 36 return E_FAIL ; 37 } 38 39 40 //分配全局存储空间 41 HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize); 42 LPVOID pvData=NULL ; 43 44 if(hGlobal==NULL) 45 return E_FAIL ; 46 47 //锁定分配内存块 48 if((pvData=GlobalLock(hGlobal))==NULL)return E_FAIL ; 49 50 ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL); 51 //把文件读入内存缓冲区 52 53 GlobalUnlock(hGlobal); 54 55 CreateStreamOnHGlobal(hGlobal,TRUE,&pStm); 56 57 //装入图形文件 58 bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); 59 60 if(FAILED(bResult)) 61 return E_FAIL ; 62 63 OLE_XSIZE_HIMETRIC hmWidth ; 64 //图片的真实宽度 65 OLE_YSIZE_HIMETRIC hmHeight ; 66 //图片的真实高度 67 pPic->get_Width(&hmWidth); 68 pPic->get_Height(&hmHeight); 69 70 if(hmWidth!=0) nScrHeight=(int)((long double)nScrWidth*hmHeight/hmWidth); 71 //将图形输出到屏幕上(有点像BitBlt) 72 bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight, 73 0,hmHeight,hmWidth,-hmHeight,NULL); 74 75 pPic->Release(); 76 77 CloseHandle(hFile); 78 //关闭打开的文件 79 80 if(SUCCEEDED(bResult)) 81 { 82 return S_OK ; 83 } 84 else 85 { 86 return E_FAIL ; 87 } 88 }
よろしく,お願いします!

浙公网安备 33010602011771号