首页 > 分享 > MFC界面美化第五篇(汇总篇)

MFC界面美化第五篇(汇总篇)

1.前言

经过了之前的四篇文章,我们单独实现了对菜单栏,标题栏,按钮,列表的美化。

在这个篇幅中,笔者会把这些整合到一个项目中,实现一个完整的美化效果。

并且还增加了,最大化,最小化,界面的自适应。

2.效果展示

视频运行效果

3.所有的源码链接,笔者使用的是vs2022

1.美化按钮的Demo
链接:https://pan.quark.cn/s/85db8ccec89a

2.列表美化的Demo
链接:https://pan.quark.cn/s/508009790543

3.标题栏美化的Demo
链接:https://pan.quark.cn/s/71c931772f62

4.菜单栏美化的Demo


链接:https://pan.quark.cn/s/265fff48ce6a

5.完整的项目包括了对菜单栏,按钮,列表,标题的美化

做了最大化,最小化的自适应。
链接:https://pan.quark.cn/s/8e2bf037daa2

4.按钮的美化

主要是封装好了mybutton.h,mybutton.cpp。两个文件。然后对按钮进行重绘

使用图片贴图对按钮进行美化。

核心代码

CMyButton m_button_start;

CMyButton m_button_stop;

GetClientRect(&rtBtnClo);

rtBtnClo.left = rtBtnClo.right - 800;

m_button_start.SetImagePath(_T(".resstart.png"), _T(".resstart.png"), _T(".resstart.png"));

m_button_start.InitMyButton(rtBtnClo.left, 60, 55, 24, true);

GetClientRect(&rtBtnClo);

rtBtnClo.left = rtBtnClo.right - 600;

m_button_stop.SetImagePath(_T(".resstop.png"), _T(".resstop.png"), _T(".resstop.png"));

m_button_stop.InitMyButton(rtBtnClo.left, 60, 55, 24, true);

详细过程可以查看这篇文章

MFC界面美化第三篇----自绘按钮(重绘按钮)-CSDN博客

5.列表的美化

封装好了列表类,主要有8个文件。对列表进行重绘。

主要注意事项,

修改我们的原始list的属性,方便我们后续重绘

边框:true
静态边缘:false
视图:Reporte
无滚动:true

详细过程可以查看这篇文章

MFC界面美化第四篇----自绘list列表(重绘列表)-CSDN博客

6.标题栏的美化

为了对标题栏进行重绘,我们要把mfc原始的标题栏去除,然后再mfc上重新绘制一块区域作为标题栏。然后再重新绘制好对应的最大化,最小化按钮。

详细过程查看这篇文章。

MFC界面美化---自绘标题栏_mfc如何做出漂亮的界面-CSDN博客

7.菜单栏的美化

核心是因为我们把原始的菜单删除了。现在要选择一块区域,写上文字。比如,文件,菜单,帮助,作为我们新的菜单。当我们点击这个菜单区域的时候,会弹出选项。

MenuEx.h MenuEx.cpp 是封装好的重绘菜单栏的文件。需要注意的是使用了hook.让重绘的时候进入我们的函数。

C++ MFC 界面美化------自绘菜单栏_mfc界面美化-CSDN博客

8.关于控件最大化,最小化 的时候的自适应问题。

主要再onsize()函数里面进行处理

对应的相关代码

CDialogEx::OnSize(nType, cx, cy);

int dlgitem[2] = { IDC_LIST1 };

for (int i = 0; i < 2; i++)

{

CWnd* pWnd = GetDlgItem(dlgitem[i]);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = rect.left * cx / m_wndRect.Width();

rect.right = rect.right * cx / m_wndRect.Width();

rect.top = rect.top * cy / m_wndRect.Height();

rect.bottom = rect.bottom * cy / m_wndRect.Height();

pWnd->MoveWindow(rect);

}

}

GetClientRect(&m_wndRect);

CWnd* pWnd = GetDlgItem(IDC_BUTTON4);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

m_button_start.ReleaseImg();

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = m_wndRect.right * 0.0098;

rect.top = m_wndRect.bottom * 0.1176;

rect.right = rect.left + 70;

rect.bottom = rect.top + 28;

m_button_start.SetImagePath(_T(".resstart.png"), _T(".resstart.png"), _T(".resstart.png"));

m_button_start.InitMyButton(rect.left, rect.top, 55, 24, true);

}

pWnd = GetDlgItem(IDC_BUTTON5);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

m_button_stop.ReleaseImg();

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = m_wndRect.right * 0.0811;

rect.top = m_wndRect.bottom * 0.1176;

rect.right = rect.left + 70;

rect.bottom = rect.top + 28;

m_button_stop.SetImagePath(_T(".resstop.png"), _T(".resstop.png"), _T(".resstop.png"));

m_button_stop.InitMyButton(rect.left, rect.top, 55, 24, true);

}

pWnd = GetDlgItem(IDC_BUTTON3);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

m_btnExit.ReleaseImg();

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = m_wndRect.right - 20;

rect.top = 5;

rect.right = rect.left + 16;

rect.bottom = rect.top + 16;

m_btnExit.SetImagePath(_T(".resicon_popup_off.png"), _T(".resicon_popup_off.png"), _T(".resicon_popup_off.png"));

m_btnExit.InitMyButton(rect.left, rect.top, 16, 16, true);

}

pWnd = GetDlgItem(IDC_BUTTON1);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

m_btnMax.ReleaseImg();

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = m_wndRect.right - 50;

rect.top = 5;

rect.right = rect.left + 16;

rect.bottom = rect.top + 16;

m_btnMax.SetImagePath(_T(".resicon_square.png"), _T(".resicon_square.png"), _T(".resicon_square.png"));

m_btnMax.InitMyButton(rect.left, rect.top, 16, 16, true);

}

pWnd = GetDlgItem(IDC_BUTTON2);

if (pWnd && nType != 1 && m_wndRect.Width() && m_wndRect.Height())

{

m_btnMin.ReleaseImg();

CRect rect;

pWnd->GetWindowRect(&rect);

ScreenToClient(&rect);

rect.left = m_wndRect.right - 80;

rect.top = 5;

rect.right = rect.left + 16;

rect.bottom = rect.top + 16;

m_btnMin.SetImagePath(_T(".resicon_minimiz.png"), _T(".resicon_minimiz.png"), _T(".resicon_minimiz.png"));

m_btnMin.InitMyButton(rect.left, rect.top, 16, 16, true);

}

Invalidate();

9.关于界面上所有的颜色

1.菜单栏的颜色

OnPaint()中这段代码决定了菜单栏的颜色

dc.FillSolidRect(rect, RGB(45, 51, 60));

dc.SetBkMode(TRANSPARENT);

2.界面主体的颜色。

OnCtlColor()中这段代码决定了界面主体的颜色

switch (nCtlColor)

{

case CTLCOLOR_DLG:

HBRUSH aBrush;

aBrush = CreateSolidBrush(RGB(30, 34, 39));

hbr = aBrush;

break;

}

3.列表的颜色

HeaderCtrlEx.cpp中这段代码决定了列表的标题头的颜色

OnNMCustomdraw()函数

GetClientRect(&rect);

pDC->FillSolidRect(&rect, RGB(30, 34, 39));

*pResult = CDRF_NOTIFYITEMDRAW;

4.ListCtrlComboEx.cpp文件中这段代码决定了列表的主体颜色

DrawItem 函数

if(bSelected)

{

pDC->SetBkColor(RGB(30, 34, 39));

pDC->SetTextColor(RGB(255,255,255));

color = RGB(30, 34, 39);

}

else

{

pDC->SetBkColor(RGB(30, 34, 39));

pDC->SetTextColor(RGB(255,255,255));

}

5.弹出菜单的颜色

由函数来设置

void SetBorderColor(COLORREF clr) { m_clrBorder = clr; }

相关知识

一个用MFC的DC实现画图的工具带各种控件资源
第五篇 昆虫分类学
MFC=VisualC6.0library.rar很好的MFC=Visual C++6.0类库大全
2024年最新种植养护心得体会精选(汇总篇)
美化家居,家庭养花技巧汇总
Word如何美化字体?
2024年优秀花卉种植心得(汇总篇)
Archlinux kde 美化
开业典礼主持词汇总多篇(9页)
第五篇 昆虫分类 第九节 缨翅目Thysanoptera

网址: MFC界面美化第五篇(汇总篇) https://m.huajiangbk.com/newsview1545108.html

所属分类:花卉
上一篇: 如何绘制Top级美图?20+案例
下一篇: 不错吧,这5种方法可以轻松美化P