首页 > 代码库 > VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法

VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法

在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());


效果图如下:

技术分享

VC++图片控件(Picture Control)显示资源位图(BMP)、文件位图(BMP)、其它格式文件图片(JPG\PNG\BMP)的方法