<转>显示图片汇总

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 }

 

posted @ 2013-11-05 15:07  陳さん様  阅读(231)  评论(0)    收藏  举报