飞道的博客

[MFC] 手动美化 MFC 窗体

220人阅读  评论(0)

去除边框

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场