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

运行效果:

相关推荐
蜗牛在听雨15 分钟前
基于 C++ 的 UG/NX 二次开发环境配置
c++·二次开发·ug
SimpleLearingAI36 分钟前
C++虚函数详解
开发语言·c++
小柯博客1 小时前
STM32MP2安全启动技术深度解析
c语言·c++·stm32·嵌入式硬件·安全·开源·github
cpp_25011 小时前
P1832 A+B Problem(再升级)
数据结构·c++·算法·动态规划·题解·洛谷·背包dp
结衣结衣.2 小时前
手把手教你实现文档搜索引擎
linux·c++·搜索引擎·开源·c++11
t***5442 小时前
如何在 Dev-C++ 中切换编译器
java·开发语言·c++
大肥羊学校懒羊羊2 小时前
完数与盈数的计算题解
数据结构·c++·算法
澈2072 小时前
构造函数与析构函数完全指南
开发语言·c++
W23035765732 小时前
C++ 高并发线程池实战(二):动态缓存线程池 + 调用者运行拒绝策略完整版实现
开发语言·c++·缓存
t***5442 小时前
如何在 Dev-C++ 中使用 Clang 编译器
开发语言·c++