当前位置:主页 > 查看内容

[MFC] 手动美化 MFC 窗体

发布时间:2021-08-11 00:00| 位朋友查看

简介:去除边框 1.把窗口边框改成无边框 但只这样做会导致无法拖动窗口。 2.在类向导中添加这个消息 OnHcHitTest 3.修改这个消息处理函数的返回值为 HTCAPTION 添加背景图片 1.准备一张 bmp 格式的图片其他格式我没有实验可能会有问题在项目中添加资源选择 BitMap……

去除边框

1.把窗口边框改成无边框:
在这里插入图片描述

但只这样做会导致无法拖动窗口。

2.在类向导中添加这个消息:OnHcHitTest
在这里插入图片描述

3.修改这个消息处理函数的返回值为:HTCAPTION
在这里插入图片描述


添加背景图片

1.准备一张 bmp 格式的图片(其他格式我没有实验,可能会有问题),在项目中添加资源,选择 BitMap ,导入:
在这里插入图片描述

在这里插入图片描述

2.在 OnPaint() 函数中添加如下代码:

// 上面还有一部分代码,是 vs 自动生成的
else
	{
		//CDialogEx::OnPaint();			// 这是原本的,注释掉

		/*
			从这里开始是我们自己的代码 ---------------
		*/ 
		
		CPaintDC   dc(this);
		CRect   rect;
		GetClientRect(&rect);												// 获取对话框长宽      
		CDC   dcBmp;															// 定义并创建一个内存设备环境
		dcBmp.CreateCompatibleDC(&dc);						// 创建兼容性DC
		CBitmap   bmpBackground;
		bmpBackground.LoadBitmap(IDB_BITMAP1);    // 载入资源中图片
		BITMAP   m_bitmap;												// 图片变量               
		bmpBackground.GetBitmap(&m_bitmap);			// 将图片载入位图中
		
		//将位图选入临时内存设备环境
		CBitmap* pbmpOld = dcBmp.SelectObject(&bmpBackground);
		
		//调用函数显示图片StretchBlt显示形状可变
		dc.SetStretchBltMode(COLORONCOLOR);			// 防止 bmp 图片压缩后失真
		dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcBmp, 0, 0, m_bitmap.bmWidth, m_bitmap.bmHeight, SRCCOPY);
	}

注意:背景图片在窗口拉伸时会失真,但配合无边框使用时不需要在意,因为本身无边框窗体不支持拉伸窗口。

还有一点,这样做需要手动添加关闭按钮,但 bmp 格式文件图片不透明所以就很丑,但使用 png 格式的图片要使用 GDI+ 库。


;原文链接:https://blog.csdn.net/Simon798/article/details/115836089
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐