MFC加载位图资源的实现

时间:2022-10-03 05:04:00

MFC加载位图资源的实现


1、添加OnEraseBkgnd函数

该方法是在指定位置加载位图 BOOL CbitmapDlg::OnEraseBkgnd(CDCpDC){    // 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);