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

运行效果:

相关推荐
云泽8081 小时前
C++11 核心特性全解:列表初始化、右值引用与移动语义实战
开发语言·c++
AI进化营-智能译站2 小时前
ROS2 C++开发系列12-用多态与虚函数构建可扩展的ROS2机器人行为模块
开发语言·c++·ai·机器人
Morwit2 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
qeen873 小时前
【数据结构】建堆的时间复杂度讨论与TOP-K问题
c语言·数据结构·c++·学习·
图码3 小时前
如何用多种方法判断字符串是否为回文?
开发语言·数据结构·c++·算法·阿里云·线性回归·数字雕刻
handler013 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
zhouwy1133 小时前
Linux进程与线程编程详解
linux·c++
A7bert7774 小时前
【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·python·深度学习·yolo·目标检测
li1670902704 小时前
第二十七章:智能指针
c语言·数据结构·c++·visual studio
王老师青少年编程5 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii