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);