在VC++ MFC编程中,我们常使用Picture Control图片控件来显示图像。下面简单归纳几种显示不同的方式:
(实例可在我的CSDN资源中下载: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());
效果图如下: