MFC加载位图资源的实现
1、添加OnEraseBkgnd函数
该方法是在指定位置加载位图
BOOL CbitmapDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP2);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
dcCompatible.SelectObject(bitmap);
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,
bmp.bmWidth,bmp.bmHeight,SRCCOPY);
return TRUE;
}
利用静态文本加载位图:
添加一个静态文本框,修改ID。
为改静态文本添加一个成员变量,或者直接在源代码中为该控件绑定一个成员变量;
HBITMAP m_handleState;
m_bkStatic2=(CStatic*)GetDlgItem(IDC_STATIC2);
m_handleState=(HBITMAP)::LoadImage(::AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP8),IMAGE_BITMAP,0,0,0);
m_bkStatic2->ModifyStyle(0,SS_BITMAP);
m_bkStatic2->SetBitmap(m_handleState);
在OnPaint函数中加载一副位图:
1、位图装载:CBitmap::LoadBitmap (CBitmap::GetBitmap取得高度)
2、创建兼容的内存DC,CDC::CreateCompatibleDC;
3、BITMAP结构体用于描述位图的属性:
typedef struct tagBITMAP { /* bm */
int bmType;
int bmWidth;
int bmHeight;
int bmWidthBytes;
BYTE bmPlanes;
BYTE bmBitsPixel;
LPVOID bmBits;
} BITMAP;
4、使用贴图函数显示内存DC中的位图内容CDC::BitBlt(.....):
代码:
CBitmap bitmap;
bitmap.LoadBitmap(IDB_PASSWORD);
BITMAP bm;
bitmap.GetBitmap(&bm);
m_dc.CreateCompatibleDC(NULL);
m_dc.SelectObject(&bitmap);//将位图选入设备描述表中
m_size.cx=bm.bmWidth;
m_size.cy=bm.bmHeight;
//DeleteObject(&bitmap);
//将窗口移动与位图相同大小
MoveWindow(0,0,m_size.cx+5,m_size.cy+5,FALSE);
在OnPaint()函数中:
CPaintDC dc(this); // device context for painting
//位图加载
dc.BitBlt(0,0,m_size.cx,m_size.cy,&m_dc,0,0,SRCCOPY);