MFC加载位图资源的实现

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

猜你喜欢

转载自blog.csdn.net/thanklife/article/details/80305285