MFC载入背景图像

在MainDlg.cpp中的OnPaint()函数中的else后添加如下代码:

{
    CPaintDC dc(this);
    CRect rect;
    GetClientRect(&rect);
    CDC dcMem;
    dcMem.CreateCompatibleDC(&dc);

    CString strPath = _T(".\\res\\background.png");
    CImage backImg;
    backImg.Load(strPath);
    if(backImg.IsNull())
        return;

    CBitmap imgBackground;
    imgBackground.Attach(backImg.Detach());

    BITMAP bitmap;
    imgBackground.GetBitmap(&bitmap);

//  CBitmap   *pOldBmp=dcMem.SelectObject(&imgBackground);  
    dcMem.SelectObject(&imgBackground);
       
    dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,
                                                  bitmap.bmHeight,SRCCOPY);
    
    CDialogEx::OnPaint();
}

在其他Dlg.cpp中的OnEraseBkgnd()函数中添加如下代码(自适应窗口):

BOOL CDlg::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CRect rect;
	GetClientRect(&rect);

	CString strPath = _T(".\\res\\bagd.jpg");
	CImage backImg;
	backImg.Load(strPath);
	if (backImg.IsNull())
	    return 0;

	CBitmap bitmap;
	bitmap.Attach(backImg.Detach());

	CDC memDC;
	BITMAP bmp;
	memDC.CreateCompatibleDC(pDC);
	memDC.SelectObject(&bitmap);
	bitmap.GetBitmap(&bmp);

    pDC->SetStretchBltMode(COLORONCOLOR); // 防失真
	pDC->StretchBlt(rect.left, rect.top, rect.Width(), rect.Height(), &memDC,
		0, 0, bmp.bmWidth, bmp.bmHeight, SRCCOPY);
	return 1;
}

 

若要使得图像跟随背景尺寸变化,可以在OnInitDialog()函数中设置:

CWnd::SetWindowPos(NULL,0,0,GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),SWP_NOZORDER | SWP_NOMOVE);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值