Vc++ - mfc - 添加背景图片

关键技术:

窗体实现加载背景图片,首先准备几张漂亮的图片,然后利用设备上下文CDC将其绘制在窗体上即可。CDC提供StretchBlt方法用于绘制图像,语法如下:

BOOL StretchBlt(int x,int y,int nWindth,int nHeight,
         CDC* pSrcDC,int ySrc,int ySrc,int nSrcWindth,int nSrcHeight,DWORD dwRop);

dwRop 光栅效果

设计过程:

1)创建一个基于对话框的应用程序,命名为CBackgroundWnd

2)删除所用空间

3)添加资源,选择位图进行导入image下的位图background.bmp,修改ID为IDB_BACKBMP

4)在窗体的OnPaint方法中将位图绘制到窗体上,代码如下:

void CCBackGroundWndDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // 用于绘制的设备上下文

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// 使图标在工作区矩形中居中
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// 绘制图标
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		//自定义代码
		CPaintDC temp_pdc(this);
		CBitmap temp_bmp;
		temp_bmp.LoadBitmap(IDB_BACKBMP);
		CDC temp_cdc;
		temp_cdc.CreateCompatibleDC(&temp_pdc);
		temp_cdc.SelectObject(&temp_bmp);

		int nW, nH;
		BITMAP temp_bmp_info;
		temp_bmp.GetBitmap(&temp_bmp_info);
		nW = temp_bmp_info.bmWidth;
		nH = temp_bmp_info.bmHeight;

		CRect temp_client_rect;
		GetClientRect(temp_client_rect);

		temp_pdc.StretchBlt(temp_client_rect.left,temp_client_rect.top,temp_client_rect.Width(),temp_client_rect.Height(),
		                    &temp_cdc,
			                0,0,nW,nH,
			                SRCCOPY);

		CDialogEx::OnPaint();
	}
}

效果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫忘输赢

莫忘输赢 - 收钱袋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值