第六篇--MFC美化界面

article/2025/9/5 9:42:38

1.MFC如何设置背景颜色

 首先,为对话框添加WM_CTLCOLOR消息,方法为:右击Dialog窗口 --> Class Wizard --> Messages --> WM_CTLCOLOR --> Add Handler --> Edit Code

然后,在Dlg.h文件中添加成员变量CBrush m_brush; 

接着,在之前Edit Code的位置,写上

HBRUSH CMFCInterfaceDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{return m_brush;
}

 

最后,在Dlg.cpp文件的OnInitDialog()函数后面加上m_brush.CreateSolidBrush(RGB(255, 255, 102));//设置背景颜色为黄色。编译运行函数即可。

 

2.MFC如何设置背景图片

首先在网上下载一张Bitmap的图片,放在res文件夹下

接着在OnInitDialog()后面加上如下代码

   CString strBmpPath = _T(".\\res\\backgroundone.jpg");CImage img;img.Load(strBmpPath);MoveWindow(0, 0, img.GetWidth(), img.GetHeight());CBitmap bmpTmp;bmpTmp.Attach(img.Detach());m_brush.CreatePatternBrush(&bmpTmp);

 

 

 3.MFC修改可执行文件和标题栏图标

创建一个新工程,可以什么都不加。打开.rc,  创建或打开Icon资源(以下都以Icon为例)。    
单击工程窗口的资源视图标签,选中资源ID为IDR_MAINFRAME图标资源,然后按Delete键把它删除掉,当然也可以不删,具体后面会讲到。    
从资源菜单中选择Resource,然后选择Icon,添加资源,选中Icon类型,点击导入,此时会叫你选择本地的图片,记住必须选择.ioc格式的图片,否则导入失败。    
把新图标的资源ID改为IDI_ICON(也可以不改)。 具体做法如下: 

有一点很重要,你改知道就是 打开Header Files下的Resource.h,找到Icon下的图标,系统默认是从128开始的,

#define IDR_MAINFRAME               128

#define IDR_ICONTETYPE             129(单/多文档程序的文档图标)

#define IDI_ICON1                            130

#define IDI_ICON2                            131

a.修改exe文件图标

VS2010生成的exe文件图标是用Icon下几个图标中value值最小的,顺序为IDR_MAINFRAME、IDR_ICONTETYPE、新加 的,所以想更改生成的exe文件图标,只要保证图标的value值是Icon下几个图标中最小的就可以了

  1. 导入自己的.ioc图片,并在Resource.h中,将自己加的icon资源Value改为最小,如下,因此不一定要删除IDR_MAINFRAME

  #define IDR_MAINFRAME                   129

  #define IDI_ICON1                               128(自己添加的icon) 

  2. 然后编译运行,找到你的debug目录,你将看到图标已经更改的.exe执行文件,这种方法可以将任何你喜欢的图片做成.exe文件图标

 

b.修改标题栏图标

  1. 如上操作,导入自己喜爱的ico图片,编辑新加icon的ID,比如我新加的Icon资源ID为 IDI_ICON1

  22. 基于对话框的程序,在构造函数中有一句

    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

    此时把IDR_MAINFRAME改为我的IDI_ICON1的图标名。

 

4. Button的绘制

 首先,拖动几个Button到窗口,然后修改Button的Owner Draw属性为true

 接着,右击Dialog窗口 --> Class Wizard --> Messages --> WM_DRAWITEM --> Add Handler --> Edit Code

void CMFCInterfaceDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{// TODO: Add your message handler code here and/or call default//获得button标题 //CString btnCaption = _T("Dialog");CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);CString btnCaption = L"";//设置标题switch (lpDrawItemStruct->CtlID){case ID1:btnCaption = "1";break;case ID2:btnCaption = "2";break;case ID3:btnCaption = "3";break;default:;}CRect drawRect;//获得绘图DC//得到原Button的矩形大小drawRect.CopyRect(&(lpDrawItemStruct->rcItem));//绘制控件框架 pDC->DrawFrameControl(&drawRect, DFC_BUTTON, lpDrawItemStruct->CtlType);//创建画刷
    CBrush pBrush;pBrush.CreateSolidBrush(RGB(100, 130, 10));//画矩形 pDC->FillRect(drawRect, &pBrush);//定义一个CRect用于绘制文本 
    CRect textRect;//拷贝矩形区域 textRect.CopyRect(&drawRect);//获得字符串尺寸CSize sz = pDC->GetTextExtent(btnCaption);//调整文本位置 居中 textRect.top += (textRect.Height() - sz.cy) / 2;//设置文本背景透明 pDC->SetBkMode(TRANSPARENT);//设置文本颜色pDC->SetTextColor(RGB(0, 0, 255));//绘制文本内容pDC->DrawText(btnCaption, &textRect, DT_RIGHT | DT_CENTER | DT_BOTTOM);CDialogEx::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
View Code

 

当然,对于不想要改变的Button,将Owner Draw属性设为false就行。

 

5.static text字体及颜色的绘制

颜色绘制:

在OnCTLColor中

HBRUSH CMFCInterfaceDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{//HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);if (pWnd == this){return m_brush;}if (pWnd->GetDlgCtrlID() == (IDC_STATIC_TITLE))//IDC_STATIC_TITLE:标题ID
    {pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(RGB(255, 251, 240));return HBRUSH(GetStockObject(HOLLOW_BRUSH));}if (pWnd->GetDlgCtrlID() == (IDC_STATIC))//IDC_STATIC:文本ID
    {pDC->SetBkMode(TRANSPARENT);pDC->SetTextColor(RGB(0, 225, 225));return HBRUSH(GetStockObject(HOLLOW_BRUSH));}return hbr;//return m_brush;
}
View Code

 

额外提示:pDC->SetBkMode(TRANSPARENT);是设置文本背景透明。

字体绘制:

首先,在Dlg.h文件中声明Font变量CFont newFont;

然后,在OnInitDialog()函数后面加上以下代码

        CFont* font;font = static_title.GetFont();//获取CFont对象
    LOGFONT lf;font->GetLogFont(&lf);//获取LOGFONT结构体lf.lfHeight = -15;    //修改字体大小lf.lfItalic = TRUE;        //倾斜lf.lfWeight = 400;   

http://chatgpt.dhexx.cn/article/5NrnUZP2.shtml

相关文章

MFC界面类库Xtreme Toolkit Pro 下载及使用教程介绍

Xtreme Toolkit Pro 是针对Windows程序员的一套先进的用户界面套包,强大的功能可使您的应用程序具有专业的、现代感的外观。 Xtreme Toolkit Pro 由8个专业级的构件组成,Xtreme CommandBars, Xtreme Docking Pane, Xtreme Property Grid, Xtreme Report …

wxWidgets界面设计工具DialogBlocks

工欲善其事,必先利其器。在MFC上开发,有VS系列强大的可视化工具,基于wx的开发工具虽然没有VS、QT的界面设计器强大,但在灵活度上VS的界面设计器是没法比的(QT的没有用过,不做评论)。 如…

Visual Studio开发MFC如何打开可视化窗口编辑界面

在使用Visual Studio 2019开发工具开发MFC工程项目时,如果把可视化界面窗口编辑界面关闭后如何打开? 1、项目关闭后重新打开时的界面,没有可视化窗口界面显示。 2、在右侧的解决方案资源管理器中,选择资源文件下的 MFCApplicati…

VisualStudio2022 MFC对话框窗体托盘图标设计

目录 效果展示头文件1.1 头文件声明 CPP文件2.1 初始化2.2 功能实现 环境:VisualStudio2022 框架: MFC 对话框窗体 功能:托盘 对话框类:CBLToolsDlg 作者:CDamogu 时间:20220308 效果展示 头文件 1.1 头文件声明 头文…

MFC界面美化---自绘标题栏

做MFC项目的时候,会经常遇到需要美化界面的时候。mfc的原始界面比较丑,今天主要记录一下对MFC标题栏重绘的过程,最终效果是这样的。 1.因为要对标题栏进行重绘,我们要把MFC的原生标题栏给去掉,在MFC对话框的属性那里&a…

Windows界面编程:MFC

前言 大家之前在学C/C语言时,基本都是通过控制台实现“人机交流”的。但大家每次在写控制台程序时,看到黑框框应该都会有些许不爽吧:“输入输出为什么不能基于图形用户界面而非要使用文本用户界面呢?”事实上,在各个环…

MFC-登录界面(可修改密码)

登录界面的博客有很多,参考了这一篇文章,下面给出链接。 MFC做一个登录界面(用户名,密码以及密码的明文密文切换)_umarutyan的博客-CSDN博客 但这里无法修改密码,下面做出一些补充。 由于用不到数据库&a…

MFC界面工具BCGControlBar入门:如何使用工具栏编辑器

BCGControlBar ("Business Components Gallery ControlBar")是MFC扩展库,使您可以创建具有完全自定义选项(功能区、可自定义工具栏、菜单等)以及一组专业设计的丰富Microsoft Office和Microsoft Visual Studio的应用程序 GUI控件&a…

MFC程序中使用QT开发界面

如果你有一个现成的MFC项目在做维护,但是你厌倦了使用MFC繁琐的操作来做界面美化,或者你需要在这个项目中用到QT里面好用的某些功能;亦或者是你需要使用某些只能在MFC中使用的组件,但是界面这部分已经用QT做好了。那么这篇文章可能…

一、MFC登陆界面

一、新建项目 打开VS2022——>创建新项目——>选择MFC应用,点击下一步——>修改项目名称和位置,点击创建——>修改应用程序类型、项目样式经典菜单选项 二、添加预处理指令 VS建议采用带_s的函数,如scanf_s、strcpy_s&#xff0…

MFC基础知识与课程设计思路

引言 本文致力于提供MFC的相关知识,以方便大家更好地认识MFC的使用方法。介绍将会分为以下几个部分:MFC初始文件的理解、MFC我们所使用的框架理解、MFC的进阶用法、MFC我在使用过程中遇到的问题及解决方法。 MFC初始文件的理解 MFC的初始文件中有两项文…

MFC添加程序关闭时时的提示界面

文章目录 MFC一.简介二.方法 MFC 一.简介 在应用程序退出的时候,不能点击叉直接退出,我们想添加一个退出提示。在点击叉后,弹出是否确定退出的界面,如下面的界面,具体操作往下看 二.方法 找到我们需要操作的主界面…

【MFC】模拟采集系统——界面设计(17)

功能介绍 启动界面 开始采集: PS:不涉及 数据保存,重现等功能 界面设计 界面分为三块:顶部黑条带关闭按钮、左边对话框,右边的主界面 资源: 顶部黑条 top.bmp 2* 29 (宽 * 高 像素点&…

MFC界面设计入门篇

点击C里的MFC再点击MFCApplication,到下面改名字和路径,然后OK 然后点击Next, 选择single document,MFCstandard,简体中文,然后Finish 这时候可以先直接运行,看看工程的样子&#x…

最最简单的几个Mac终端命令

几个简单的Mac终端命令 目录切换相关 cd空格/ 回到根目录cd空格… (或者 cd空格…/) 回到上一级目录cd空格. 回到当前目录pwd 显示从根目录到当前目录的完整目录 vi操作相关 注意:vi操作的文件如果不存在,则先自动创建一个该名字…

Mac 终端基本命令

基本命令 1、列出文件 ls 参数 目录名 例: 看看驱动目录下有什么:ls /System/Library/Extensions 参数 -w 显示中文,-l 详细信息, -a 包括隐藏文件 2、转换目录 cd 例:想到驱动目录下溜达一圈 cd /System/Library/Extension…

10需要知道Mac终端命令

如果你想进入web开发领域,知道什么是终端,如何使用终端是非常有益的。在今天的文章中,我们将介绍Mac终端命令的10个必要知识! 🙂 什么是终端(Terminal) 终端最基本的用途是可以浏览计算机的文…

Mac终端命令

Mac电脑安装程序,打开允许任何来源的方法,在终端执行命令行即可。 打开命令:sudo spctl --master-disable 关闭命令:sudo spctl --master-enable Mac终端打开文件 1.打开文件夹的命令很简单,使用 open 文件夹…

Mac终端命令失效( command not found)/

ls vi vim 输入完来一句command not found xx 心哇凉哇凉的,心态都崩了。 guolianggldeMacBook-Pro ~ % cat zsh: command not found: cat guolianggldeMacBook-Pro ~ % ls zsh: command not found: ls guolianggldeMacBook-Pro ~ % mdfind zsh: command not fo…

MacOS系统终端常用命令大全

MacOS系统终端是使用mac电脑的小伙伴需要或多或少了解的一个应用。熟悉并掌握一些基本的常用命令可以帮助我们快速的解决一些日常问题,提高工作效率,下面让小编带大家了解一下吧! 基本概念 命令的构成:Command Name、Options、Ar…