显示一副位图的步骤:
1) CBitmap bitmap;
Bitmap.LoadBitmap(..) 创建CBitmap对象,然后加载一个位图资源
2) 创建兼容DC
CDC dc;
dc.CreateCompatibleDC(..)
3) 将位图选入兼容DC
Bitmap.SelectObject(…)
4) 将兼容DC中的位图贴到当前DC中
可以使用 Bitblt(。。),或者StretchBlt(…)
前者是1:1复制,当窗口不够大时,不会完全显示位图,但是后者可以根据位图大小,窗口大小自动调节,确保可以在窗口中完全显示位图
我们可以在窗口重绘的时候,显示位图
所以我们在视类的OnDrew函数中 添加如下代码
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);//加载位图
BITMAP map;//这个结构体中包含了当前位图的信息
bitmap.GetBitmap(&map);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);//创建兼容DC
CBitmap *pOldobject;
pOldobject=dcCompatible.SelectObject(&bitmap);//将位图选入兼容DC
CRect rect;
GetClientRect(&rect);//获取客户区
// pDC->BitBlt(0,0, rect.Width(), rect.Height(), &dcCompatible,
//0, 0, SRCCOPY);
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,map.bmWidth,map.bmHeight,SRCCOPY);//将兼容dc中的位图贴到当前DC中
dcCompatible.SelectObject(pOldobject);
这几个函数大家可以查看一下MSDN,不是很难的。。。
<二>位图按钮
利用CBitmapButton类实现位图按钮
步骤:
1: 选择这个按钮,查看属性->style->选择owener drew
2: 定义一个变量 CBIitmapButton m_btn;
注意:不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,
这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误
3: 使用CBitmapButton::LoadBitmaps装载各种状态的图片,
使用CBitmapButton::SubclassDlgItem关联到想要的按钮,
使用CBitmapButton::SizeToContent函数使按钮适合图片大小。
注意Loadbitmaps一定要在关联到按钮之前进行!
实例:
BOOL CBitmapbuttonDlg::OnInitDialog()
{
。。。。。
…….
m_btn.LoadBitmaps(IDB_BITMAP3);
m_btn.SubclassDlgItem(IDC_BUTTON1,this);
m_btn.SizeToContent();
return TRUE; // return TRUE unless you set the focus to a control
}
给大家推荐一个网站 里边有很多常用图片 http://ui.okbase.net/
下载的图片是gif格式的,可以用acdsee 转换成bmp格式的
还有一种方法:(先把按钮属性 设置为style->bitmap)
1) 给一个按钮绑定一个成员变量 : 右键按钮->class wizard->member variable->add variable
2)
BOOL CBitmapbuttonDlg::OnInitDialog()
{
。。。。。
…….
//m_btn.LoadBitmaps(IDB_BITMAP3);
// m_btn.SubclassDlgItem(IDC_BUTTON1,this);
// m_btn.SizeToContent();
HBITMAP hbmp2=::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3));
m_btn2.SetBitmap(hbmp2);
return TRUE; // return TRUE unless you set the focus to a control
}
这种方法 效果不是很好。。。