周六的日子就是叫个外卖一个人安安静静呆在实验室修炼。还没有解决LoadBitmap(LPCSTR lpszBitmap)的用法,只会用ID不行呀
显示DDB位图的基本过程如下:
(1)生成CBitmap类的对象,使用CBitmap::LoadBitmap函数将位图加载入内存
(2)生成CDC对象,用CDC::CreateCompatibleDC函数创建与显示设备上下文兼容的内存设备上下文CDC对象。
(3)用CDC::SelectObject函数将位图对象选入创建的内存设备上下文,并保存内存设备上下文原有的位图指针。
(4)用CDC::BitBlt函数显示位图
(5)用CDC::SelectObject函数恢复内存设备上下文中的原有位图。
/***********************************************************************
* \函数名称
* DisplayDDB
*
* \输入参数:
* CDC* pDC 显示设备上下文
* LPCSTR lpseBitmap 位图资料名
*
* \返回值:
* TRUE: 操作成功,返回TRUE
* FALSE: 操作失败,返回FALSE
*
************************************************************************
*/
BOOL CDDBView::DisplayDDB(CDC *pDC, UINT nIDResource)
{
CBitmap Bitmap, *pOldBitmap; //创建CBitmap对象和旧的CBitmap对象指针
BITMAP bm; //BITMAP结构,用于存放位图数据
CDC MemDC; //内存设备上下文
//载入位图资源
if(! Bitmap.LoadBitmap(nIDResource))
return FALSE;
else
//载入位图资源成功,从位图资源获取信息并填充到bm
Bitmap.GetObject(sizeof(BITMAP), &bm);
//生成与pDC可兼容的设备上下文
if(!MemDC.CreateCompatibleDC(pDC))
return FALSE;
//将位图对象选入创建的内存设备上下文,并保存内存设备上下文中原有的位图指针
pOldBitmap = (CBitmap*)MemDC.SelectObject(&Bitmap);
//显示位图
pDC->BitBlt(0,0,bm.bmWidth,bm.bmHeight,&MemDC,0,0,SRCCOPY);
//恢复内存设备上下文中的原有位图
MemDC.SelectObject(pOldBitmap);
return true;
}
void CDDBView::OnDraw(CDC* pDC)
{
CDDBDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
DisplayDDB(pDC,IDB_BITMAP1);
}
刚开始我直接添加为DisplayDDB为类成员函数,可是在智能声明我这个类成员函数的时候是没有给参数的。就会出错
需要手动添加如下:(毕竟不会智能到知道你要添加的函数需要几个参数)