在VC++ MFC編程中,我們常使用Picture Control圖片控件來顯示圖像。下面簡單歸納幾種顯示不同的方式:
(實例可在我的CSDN資源中下載:[http://download.csdn.net/detail/margin1988/8341525](http://download.csdn.net/detail/margin1988/8341525))
**第一種、資源位圖方式顯示BMP圖片**
如果要顯示的是一張BMP位圖,則可以采用資源位圖方式,具體步驟如下:
(1)將BMP文件拷貝到工程的res目錄下;
(2)在對話框中添加一個Picture Control控件,例如:ID為IDC_STATIC1,Type設為Bitmap;
(3)在工程的資源視圖下,右鍵“添加資源”,現在資源類型Bitmap,然后“導入”(1)中的文件,例如:導入后資源的ID為IDB_BITMAP1;

(4)為IDC_STATIC1?Picture Control控件添加Control類型變量,例如:CStatic m_resbmp;
(5)在此控件上顯示來自資源中的BMP位圖IDB_BITMAP1,代碼如下:
~~~
HBITMAP hBitmap;
// 顯示資源中的圖像(僅限位圖BMP)
hBitmap =(HBITMAP)LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP1),
IMAGE_BITMAP,0,0,
LR_LOADMAP3DCOLORS);
m_resbmp.SetBitmap(hBitmap);
~~~
**第二種、文件位圖方式顯示BMP圖片**
如果要顯示的是一張BMP位圖,也可以采用文件位圖的方式,具體步驟如下:
(1)將BMP文件拷貝到工程的可執行文件目錄下(如:Debug目錄,beixin.bmp文件);
(2)在程序中獲取可執行文件目錄的全路徑,代碼如下:
~~~
CString exepath;//exe路徑
char filepath[256];
char *pPath;
GetModuleFileName(AfxGetInstanceHandle(),filepath,256);
pPath = strrchr(filepath,'\\');
*pPath = 0;
exepath = filepath;
~~~
(3)在對話框中添加一個Picture Control控件,例如:ID為IDC_STATIC2,Type設為Bitmap;
(4)為IDC_STATIC2?Picture Control控件添加Control類型變量,例如:CStatic m_filebmp;
(5)在此控件上顯示來自文件的BMP位圖beixin.bmp,代碼如下:
~~~
// 顯示文件中的圖像(僅限位圖BMP)
HBITMAP hBitmap;
CString filebmppath;
filebmppath.Format("%s\\beixin.bmp",exepath);//位圖文件全路徑
hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(),_T(filebmppath),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
m_filebmp.SetBitmap(hBitmap);
~~~
**第三種、文件圖片方式顯示JPG\PNG\BMP等圖片**
如果要顯示的是一種JPG圖片、PNG圖片或者BMP圖片(亦可)等其他格式的靜態圖片,則可使用文件圖片的方式,步驟如下:
(1)將圖片文件拷貝到工程的可執行文件目錄下(如:Debug目錄,shoutao.jpg\shoutao.png\shoutao.bmp文件);
(2)在程序中獲取可執行文件目錄的全路徑,同上(第二種(2));
(3)在對話框中添加一個Picture Control控件,例如:ID為IDC_STATIC3,Type設為Frame;
(4)為IDC_STATIC3?Picture Control控件添加Control類型變量,例如:CStatic?m_fileimg;
(5)在此控件上顯示來自文件的JPG\PNG\BMP圖片shoutao.jpg\shoutao.png\shoutao.bmp,代碼如下:
~~~
//.h文件中
CFileFind finder;
void showimg(char* imgpath);//顯示不同格式圖片的函數
//.cpp文件中
void CPoint34Dlg::showimg(char* imgpath)
{
// 顯示文件中的圖像(不限圖像格式)
if (finder.FindFile(imgpath))
{
CRect rect;
m_fileimg.GetClientRect(&rect);
CImage img;
img.Load(imgpath);
CDC* pDC = m_fileimg.GetWindowDC();
img.Draw(pDC->GetSafeHdc(),rect);
ReleaseDC(pDC);
}
}
~~~
~~~
//.h文件中
CString fileimgpath;
//.cpp文件中,調用圖片顯示函數
srand((unsigned)time(NULL));
int rd = rand()%3;
switch (rd)
{
case 0:
fileimgpath.Format("%s\\shoutao.bmp",exepath);
break;
case 1:
fileimgpath.Format("%s\\shoutao.png",exepath);
break;
case 2:
fileimgpath.Format("%s\\shoutao.jpg",exepath);
break;
}
showimg(fileimgpath.GetBuffer());//調用
~~~
(6)這種在Picture Control控件中顯示圖片的方式,千萬不要忘記在對話框的OnPaint()中添加窗口更新、重繪圖像,否則,被對話框最小化或被遮擋后,圖像不能正常顯示,在OnPaint()中添加代碼如下:
~~~
CDialog::OnPaint();
//對話框被最小化或被遮擋后,圖像不能正常顯示,需要更新、重繪窗口
UpdateWindow();
showimg(fileimgpath.GetBuffer());
~~~
效果圖如下:

- 前言
- VC++中自定義熱鍵及響應
- CFileDialog文件對話框
- VC++中客戶區保存為BMP圖片
- VC++讀、寫注冊表
- VC++播放音頻文件和音頻數據的方法
- VC++調用Matlab編寫的DLL(混合編程)
- VC++中文件讀、寫和其他相關操作匯總
- VC++獲取系統當前時間
- VC++按鈕控件字體設置
- VC++軟件界面風格簡單美化
- VC++中一些常用的數據類型之間的相互轉化
- VC++中截取字符串的方法
- VC++中vector矢量的使用方法及隨機相關
- VC++中結構體的定義及使用
- VC++中List Control控件的使用方法介紹
- VC++中窗口過程函數及其消息發送、響應機制介紹
- VC++中Ribbon編程架構及SDI架構多視圖切換介紹
- 串口通信基礎知識及VC++實現
- VC++中單個鍵盤按鍵的響應
- VC++中的計時器及多媒體高精度計時器
- VC++編寫DLL導出函數及其調用方法
- VC++對話框(CDialog)的全屏顯示及控件居中顯示
- VC++對話框(CDialog)添加背景圖片
- VC++圖片控件(Picture Control)顯示資源位圖(BMP)、文件位圖(BMP)、其它格式文件圖片(JPG\PNG\BMP)的方法
- VC++對Access數據庫的操作(查詢、插入、更新、刪除等)