美文网首页
MFC窗口美化之背景自绘

MFC窗口美化之背景自绘

作者: 一只大蜘蛛 | 来源:发表于2020-05-22 22:14 被阅读0次

一个优秀的应用程序,除了拥有实用的功能之外,外观是否做的好看,也是很重要的。就如同现实生活中,找女朋友是一样的。长的好看的女孩子,肯定要比长的一般的女孩子更受关注。不可否认 不论是找女朋友; 还是应用程序 。好看的外观只占据了一部分,更多的是要看 内在(实用功能),如果没有良好的内在(实用功能),那么外观弄的在好看都没有用 。

默认界面

首先用MFC图形框架新建一个图形界面程序,界面风格是默认的windows风格。如果对界面没啥要求,这样的界面也基本够用了。没有对比就没有伤害,如果拿这样的界面程序和QQ对比,就会感觉弱爆了。

image

界面绘制

接着把窗口默认的边框去掉,把窗口的Border属性改为None。这样就把窗口的默认边框去除掉了,默认的边框不需要,绘制操作主要是在客户区域完成。图标已经最大化按钮和最小化按钮都自行绘制。

image

OnInitDialog()函数

接着打开程序的MFCApplication1Dlg.cpp实现文件,在窗口初始化OnInitDialog()函数的后面添加以下代码。除此之外还需要在 MFCApplication1Dlg.h声明文件中,添加 一行 CBrush m_bkBrush;,用来声明 m_bkBrush这个变量。注意背景图片的路径,需要在当前目录下的res目录,添加一张名为bgimg.png的图片。

    CString strBmpPath = _T(".\\res\\bgimg.png");

    CImage img;

    img.Load(strBmpPath);

    MoveWindow(0, 0, img.GetWidth(), img.GetHeight());

    CBitmap bmpTmp;

    bmpTmp.Attach(img.Detach());

    m_bkBrush.CreatePatternBrush(&bmpTmp);

OnCtlColor函数

下面需要重载一下 OnCtlColor这个函数,点击类视图-->点击窗口类-->消息-->OnCtlColor, 然后在cpp文件下的OnCtlColor函数中,添加以下的几句代码。OnCtlColor函数主要是返回窗口在绘制前用到的画刷资源,只要把我们创建的画刷,让这个函数返回就行了。这样就完成窗口的背景替换了,运行程序看看你的窗口背景有没有成功被替换。 断刀流

image

OnNcHitTest函数

但是你会发现背景被替换后,但是窗口不能正常拖动了。接着需要按照上一个步骤,重载一下OnNcHitTest函数,在OnNcHitTest函数下添加以下俩行代码,OnNcHitTest函数主要是判断鼠标的光标是否在客户区,现在因为默认的边框去掉了。光标一直停留在客户区,所以窗口就移动不了了,这俩行代码主要是让窗口可以正常移动。

image

效果演示

这是我随便选取的一张图片,看上去效果可能不是很好。当然 如果你们会PS的,可以把背景做的更加高大上一点。我这边就随便找一张图片凑合一下了,程序的四个角是圆角的,截图不完整可能看不到边框的圆角,如需把边框变成圆角的,还需在OnInitDialog()函数下面添加如下代码:

    CRgn rgnTmp;
    RECT rc;
    GetClientRect(&rc);
    rgnTmp.CreateRoundRectRgn(rc.left + 1, rc.top + 1, rc.right+3, rc.bottom- 2, 6,6);
    SetWindowRgn(rgnTmp, TRUE);
image

像写程序方面的文章,因为涉及到代码很多,可能讲的不是很明白。不过没关系,有时间我会录制教程上传到哔哩哔哩。下遍文章给大家讲解一下按钮的美化,如果你会C或是C++,还是看不懂MFC,可以看一下《老密查询”软件开发之界面设计(一)我这篇文章下面,上传的C++和MFC的基础教程。

文章声明

<cite>此文章只用于技术交流学习,切勿用作非法用途,否则后果自负。</cite>

相关文章

网友评论

      本文标题:MFC窗口美化之背景自绘

      本文链接:https://www.haomeiwen.com/subject/tlqhahtx.html