首页 > 编程语言 > 详细

VC++控件加载BMP图片(静态和动态方式)

时间:2016-03-12 13:21:00      阅读:439      评论:0      收藏:0      [点我收藏+]

早期时候就网上找代码实现了VC++对话框的picture control静态/动态加载BMP图片,然而并没用真正的理解到其中的实质,以至于再次使用时总出错。故写此博客方便后续的查看,也希望对需要的人有所帮助:

Picture control控件、Text Control等都属于静态文本控件,所属类都是CStatic类

一. picture control静态加载BMP图片

(1)新建一个MFC对话框,并添加picture控件.

(2)准备一张Bitmap图片,名称设为“test.bmp”,放到工程的res文件夹中.

(3)在“资源视图”中添加Bitmap资源,并将该bmp图加载到其中,ID名为:IDB_BITMAP1

(4)修改picture 控件的Type属性为Bitmap

(5)在图片控件的Image属性的下拉列表中选择3)中导入的位图IDB_BITMAP1

(技术分享

6)编译报错“error RC2108: expected numerical dialog constant”,双击错误,找到位置,在错误位置添加:“Static”, SS_BITMAP

 技术分享

(7)编译运行

二.静态控件动态加载BMP图片
要想在VC中动态显示位图,有两种比较简单的方法:

方法1.显示已添加为为工程资源的位图

case1:picture control和Text Control等Static控件

(1)新建一个MFC对话框

(2)把图片加为工程的资源,设其句柄名为IDB_BITMAP1;

(3)然后放一个静态控件或者图片控件到对话框上,将其句柄名设为IDC_STATIC_PICTURE1;

(4)具体代码:在需要使用的地方(如按钮函数或OnInitDialog()或OnPaint()里等等)加入如下代码:

CStatic *p =(CStatic *)GetDlgItem(IDC_SHOWBMP); //获得指向IDC_STATIC_PICTURE1的指针,并将其强制转换为CStatic*类型,并赋值给p

HBITMAP hBitmap=::LoadBitmap(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));//从工程资源处获得IDB_BITMAP1的位图句柄,并将其赋值给hBitmap变量

p->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE); //设置该静态控件(p指向的静态控件),使其用于显示位图,并且是在控件中央显示 //(若无此步无法显示,因为没有说明静态对话框要显示的类型是什么)

p->SetBitmap(hBitmap); //将需要显示的位图设置为bBitmap,即资源IDB_BITMAP1的句柄

 

case2:Button Control控件

(1).通过类向导,对控件添加control变量
 eg: CButton m_buttonOpen;
(2).将控件的“Bitmap/ICON”属性修改为"True"
(3).在工程资源视图里面的Icon/res添加ICON/bmp资源,并更改ID
(4)在OnInitDialog函数里面添加生成代码
//添加bmp图
 HBITMAP hBmpMLT = ::LoadBitmap(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDB_BITMAP1));
 CButton_Main.SetBitmap(hBmpMLT);

//添加ICON图片

 HICON hicon0 = AfxGetApp()->LoadIcon(IDI_ICON_OPEN);
 m_buttonOpen.SetIcon(hicon0);
 
case2:Group Box控件
//pwd为控件的句柄,x为位图的ID
//调用方法:在onpaint函数中:DrewAreaBmp(GetDlgItem(IDC_STATIC_TEST), IDB_BITMAP1);

void CVRHuiyanDlg::DrewAreaBmp(CWnd *pwnd, int x)
{
CPaintDC dc(pwnd);
CRect myrect;
pwnd->GetClientRect(&myrect);

CDC dcMem;
dcMem.CreateCompatibleDC(&dc);
CBitmap bmpBackground;
bmpBackground.LoadBitmap(x); //IDB_BITMAP_TOOL是你自己的图对应的ID
BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld = dcMem.SelectObject(&bmpBackground);
dc.StretchBlt(0, 0, myrect.Width(), myrect.Height(), &dcMem, 0, 0, bitmap.bmWidth, bitmap.bmHeight, SRCCOPY);

}

方法2.通过位图所在路径显示位图(此方法无需事先将位图文件添加为该工程的资源)

(1)新建一个MFC对话框

(2)在对话框上放一个静态控件(一定是静态控件,若图片控件则无法显示) 将其重命名为IDC_STATIC_PICTURE1,然后再通过类向导为该控件添加一个变量,命名为m_image.

(3)在按钮函数或OnInitDialog()或OnPaint()等函数里面加入如下代码:

this->m_image.ModifyStyle(0,SS_BITMAP | SS_CENTERIMAGE); //和上面的作用一样,将该静态控件设置为是用来显示位图的,只不过这里是通过该静态对话框的变量来进行modifystyle操作的

HBITMAP hBmp = (HBITMAP)::LoadImage(0, "xx//text.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //从bmp文件所在的路径直接读取该bmp图象的句柄,并将其转换为HBITMAP类型

//注:其中的"xx//test.bmp"是相对路径,即在和可执行文件的同一目录,下有一个名为path的文件夹,里面有一个名为test.bmp的位图文件. 

this->m_image.SetBitmap(hBmp); //通过变量m_image来设置该静态框所显示的位图文件.

 //转载请说明文章出处!

VC++控件加载BMP图片(静态和动态方式)

原文:http://www.cnblogs.com/zsr-programmer/p/5268350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!