1、用Picture控件显示图片
1、首先添加Picture控件,ID为IDC_IMG_BTM
2、定义 CBitmap* m_pBitmap;3、导入图片,并定义ID为IDB_TEST_IMG4、动态加载代码如下: 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 //创建兼容DC15 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 #include2 #include 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 }