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

运行效果:

相关推荐
LXS_3571 天前
Day 18 C++提高 之 STL常用容器(string、vector、deque)
开发语言·c++·笔记·学习方法·改行学it
deng-c-f1 天前
Linux C/C++ 学习日记(53):原子操作(二):实现shared_ptr
开发语言·c++·学习
一个不知名程序员www1 天前
算法学习入门---结构体和类(C++)
c++·算法
墨雪不会编程1 天前
C++ string 详解:STL 字符串容器的使用技巧
java·开发语言·c++
yangpipi-1 天前
《C++并发编程实战》第5章 C++内存模型和原子操作
android·java·c++
SunkingYang1 天前
MFC进程间消息通信深度解析:SendMessage、PostMessage与SendNotifyMessage的底层实现与实战指南
c++·mfc·共享内存·通信·postmessage·sendmessage·进程间
XFF不秃头1 天前
力扣刷题笔记-旋转图像
c++·笔记·算法·leetcode
王老师青少年编程1 天前
csp信奥赛C++标准模板库STL案例应用3
c++·算法·stl·csp·信奥赛·lower_bound·标准模版库
Tim_101 天前
【C++入门】04、C++浮点型
开发语言·c++
hkNaruto1 天前
【C++】记录一次C++程序编译缓慢原因分析——滥用stdafx.h公共头文件
开发语言·c++