
添加背景最好是放在OnEraseBkgnd(CDC* pDC)函数中,在OnPaint中有可能会闪屏。
// CBitmap m_pBmp// BITMAP bm
// CDC dcMem
// m_pBmp.LoadBitmap(IDB_BITMAP_BG)
// m_pBmp.GetBitmap(&bm)//得到位图尺寸
// dcMem.CreateCompatibleDC(pDC)
// CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp)
// pDC->SetStretchBltMode(COLORONCOLOR)//这个模式不设置的话会导致图片严重失真
// pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0, bm.bmWidth,bm.bmHeight,SRCCOPY)
// dcMem.SelectObject(pOldBitmap)
// dcMem.DeleteDC()
用我这个代码
为什么要LoadBitmap 2次?
在MFC中给对话框中设置背景图片,方法有多种,这里整理了三种,具体 *** 作如下:方法一:
1、声明成员变量CBrush m_brush
2、在InitDialog中添加代码:
CBitmap bmp
bmp.LoadBitmap(IDB_BITMAP1) //这个IDB_BITMAP1要自己添加
m_brush.CreatePatternBrush(&bmp)
3、重载对话框的OnCtlColor,改最后的返回值:
return (HBRUSH)m_brush
方法二:
把下面这段代码加进OnPaint()里就行了
CPaintDC dc(this)
CBitmap bitmap
bitmap.LoadBitmap(IDB_BITMAP1) //这个IDB_BITMAP1要自己添加
CBrush brush
brush.CreatePatternBrush(&bitmap)
CBrush* pOldBrush = dc.SelectObject(&brush)
dc.Rectangle(0,0,200,200) // 这些参数可以调整图片添加位置和大小
dc.SelectObject(pOldBrush)
方法三:使用StretchBlt()函数,具有图像自适应窗体功能
CPaintDC dc(this)
CBitmap m_bmpBK
m_bmpBK.LoadBitmap(IDB_BITMAP1)
CRect rect
GetClientRect(&rect)//获得目标尺寸,即窗口客户区的坐标
BITMAP bitMap//位图结构体
m_bmpBK.GetBitmap(&bitMap)//获得原图片尺寸
CDC dcMem //目标DC
dcMem.CreateCompatibleDC(&dc)//创建与dc兼容的内存DC
dcMem.SelectObject(&m_bmpBK)//将位图对象m_bmpBK选入内存DC
dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY)
// 设置背景BOOL CXXX::OnEraseBkgnd(CDC* pDC)
{
// return CView::OnEraseBkgnd(pDC)
CRect rect
GetClientRect(&rect)
CBitmap m_pBmp
BITMAP bm
CDC dcMem
m_pBmp.LoadBitmap(IDB_BlueBackGround)
m_pBmp.GetBitmap(&bm)//得到位图尺寸
dcMem.CreateCompatibleDC(pDC)
CBitmap* pOldBitmap = dcMem.SelectObject(&m_pBmp)
pDC->SetStretchBltMode(COLORONCOLOR)//这个模式不设置的话会导致图片严重失真
pDC->StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMem, 0, 0,bm.bmWidth,bm.bmHeight,SRCCOPY)
dcMem.SelectObject(pOldBitmap)
dcMem.DeleteDC()
return TRUE // **** 返回true
}
// 设置颜色
BOOL CCXXXDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rc
GetClientRect(rc)
COLORREF color = RGB(15,140,232)
CBrush brBlack(color)
CBrush* oldBrush = pDC->SelectObject(&brBlack)
pDC->Rectangle(rc)
pDC->SelectObject(oldBrush)
return TRUE
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)