1.显示一个BMP图片到窗口上
开始你得有一个BMP图片的资源,找到图片之后导入到项目资源中
首先需要新建一个图片控件,直接拖拽到想放置的位置即可
然后在Picture控件的Type属性下拉框中选择Bitmap;
在Picture控件的Image属性下拉框中选择BMP资源ID为IDC_BITMAP1即可。
Type属性下拉列表中有8种类型,下面分别介绍下:
Frame:显示一个无填充的矩形框,边框颜色可以通过Color属性的下拉列表设定
Etched Horz:显示一条横分割线
Etched Vert:显示一条竖分割线
Rectangle:显示一个填充的矩形框,矩形颜色可通过Color属性的下拉列表设定
Icon:显示一个图标(Icon),图标通过Image下拉列表来设置图标资源ID
Bitmap:显示一个位图(Bitmap),位图通过Image下拉列表来设置位图资源ID
Enhanced Metafile:显示一个加强的元数据文件(Metafile)
Owner Draw:自绘
2.如何动态的去加载一个BMP图片呢
这里添加一个按钮,通过点击来显示出图片
这个给picture控件添加一个变量m_picture,添加一个按钮来控制显示bmp图片资源
void CMFC_Test1Dlg::OnBnClickedButton15()
{
// TODO: 在此添加控件通知处理程序代码
//新建一个bmp文件资源变量
CBitmap m_bmp;
//加载资源对应的ID
BOOL b_load = m_bmp.LoadBitmap(IDB_BITMAP2);
//如果加载成功则进行显示
if (b_load){
m_picture.SetBitmap((HBITMAP)m_bmp);
}
//m_picture
}
也可以通过加载文件的方式来显示bmp图片
//方式二,通过图片的路径来进行加载显示
//加载的图片在当前EXE的模块外
//可以指定图片大小,如上图中的50, 50,若实际大小和此不相符,会自动缩放图片
//LR_DEFAULTCOLOR — 指定按照原图的颜色加载图片,不可少
//LR_LOADFROMFILE — 加载外部的Bitmap,一定要指定
//LR_CREATEDIBSECTION — 一般会指定
//如若按照图片本身的大小加载,则设置cx, cy为0, 0,并且在最后的标志位加上 | LR_DEFAULTSIZE
//注意:从网上下载的Bitmap图片可能用上面的方法加载失败,返回的HBITMAP为NULL,
//GetLastError()返回0,这个一般是图片格式的问题,可以用Windows的画图程序打开Bitmap再另存为24位位图的bmp格式就可以了。
HBITMAP hbmp = (HBITMAP)::LoadImage(NULL, _T("F:\\VSproject\\MFC_project\\0428test\\MFC_Test1\\MFC_Test1\\res\\IDC_520.bmp"), IMAGE_BITMAP,0,0,LR_DEFAULTCOLOR|LR_DEFAULTSIZE|LR_LOADFROMFILE);
m_picture.SetBitmap(hbmp);
效果如下图所示
3.如何加载其他类型的图片呢?比如png、jpg等等格式
默认情况下,Picture控件只能显示BMP类型的图像,因为BMP文件格式是微软自家的。但是bmp
这个确实不是很常用,或者说针对 png、jpg、gif 等文件类型来说 bmp 不常用。那么Picture控件
如何来显示我们常用的 png、jpg 等图像格式呢?这里要借助微软的ATL中的一个类:CImage
代码如下所示:
void CMFC_Test1Dlg::OnBnClickedButton17()
{
// TODO: 在此添加控件通知处理程序代码
CImage cim;
cim.Load(_T("F:\\VSproject\\MFC_project\\0428test\\MFC_Test1\\MFC_Test1\\res\\image.jpg"));
HBITMAP hbmp = cim.Detach();
m_picture2.SetBitmap(hbmp);
m_picture2.SetWindowPos(NULL, 0, 0, 192, 78, SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOZORDER);
}
还有需要注意的是每次编辑,图片控件都会报错如下所示
解决方法:
双击这个错误,会跳到提示错误的那一行,在那一行中的一串地址前插入:"Static", SS_BITMAP,