MFC为控件添加背景图片

1、 添加选择Bitmap导入图片,图片文件最好放在项目res目录中,同时是BMP格式。上传后的图片在资源视图,命名为IDB_BITMAP_M_BACK。

2、在cpp的C***Dlg::OnPaint()函数下添加如下代码

cpp 复制代码
void C***Dlg::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码 
		
	//获取控件在对话框上的位置,*IDC_STATIC_ENERGY_S为需添加背景图片的控件*
	CRect rect;
	GetDlgItem(IDC_STATIC_ENERGY_S)->GetWindowRect(&rect);//获取控件的屏幕坐标
	ScreenToClient(&rect);	//转换为对话框上的客户坐标
	
	CBitmap   bmpBackground;    
	bmpBackground.LoadBitmap(IDB_BITMAP_M_BACK);  //加载位图 
	BITMAP   bitmap;    
	bmpBackground.GetBitmap(&bitmap);   	//生成BITMAP
	
	CDC   dcMem;    
	dcMem.CreateCompatibleDC(&dc);    //选入DC 
	CBitmap   *pbmpOld=dcMem.SelectObject(&bmpBackground);   
	
	 //用客户区的DC绘制所生成的BITMAP,并适应为窗口大小 
	dc.StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);  
	
	// 不为绘图消息调用 CDialogEx::OnPaint()
}

如果是主程序的cpp文件中已有OnPaint函数,则修改else部分代码:

cpp 复制代码
void C***Dlg::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
	{
	//	CDialogEx::OnPaint(); //注释该语句:防止重复调用重画函数
		***在这里添加上面那段代码***
	}
}

运行效果:

相关推荐
橘颂TA几秒前
【剑斩OFFER】算法的暴力美学——连续数组
c++·算法·leetcode·结构与算法
学困昇24 分钟前
C++11中的{}与std::initializer_list
开发语言·c++·c++11
郝学胜-神的一滴27 分钟前
Qt的QComboBox控件详解:从API到样式定制
开发语言·c++·qt·程序人生·个人开发
程序喵大人3 小时前
推荐个C++高性能内存分配器
开发语言·c++·内存分配
zephyr053 小时前
深入浅出C++多态:从虚函数到动态绑定的完全指南
开发语言·c++
码力码力我爱你4 小时前
C++静态变量依赖关系
java·jvm·c++
加勒比之杰克4 小时前
【C++11】Lambda 表达式、可变参数、emplace_back 系列
开发语言·c++·lambda·emplace_back·可变参数模版
Bona Sun4 小时前
单片机手搓掌上游戏机(十一)—esp8266运行gameboy模拟器之硬件连接
c语言·c++·单片机·游戏机
思成不止于此5 小时前
【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
开发语言·数据结构·c++·笔记·学习·搜索二叉树·c++40周年
蜉蝣之翼❉5 小时前
opencv c++ 修改加载图像大小限制
c++·opencv·webpack