MFC入门小项目

article/2025/10/22 4:27:47

之前学习MFC的时候就是三天打鱼两天晒网,什么都不记,脑子也不转,完全是代码的搬运工。这次又要从头开始,索性写个博客了。截至目前断断续续更了三十篇blog,文笔依然如此拙劣,实属羞愧。技术尚且肤浅,表达间歇性障碍。若有不到之处,还请各位看官见谅。本着菜鸟精神,一步一步的记载。大神请移步。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

系统:win10 64位、visual studio 2013

没有vs2013的童鞋请在这里下载:

链接:https://pan.baidu.com/s/1K74efwL5rSyONF7VS1IRMQ
提取码:pb7k

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

参考blog:https://blog.csdn.net/wang18323834864/article/details/78621633

做一个简单的加法计算器

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、搭建界面

首先要新建一个项目,选择MFC应用程序,名字自己起

然后点击确定,下一步,选择基于对话框模式的应用程序,如下

这时候在类视图下可以看到系统自动创建了三个类,分别是CAboutDlg、CAdditionApp和CAdditionDlg。CAboutDlg是应用程序的“关于”对话框,CAdditionApp是由CWinApp派生的类,CAdditionDlg是主对话框类,主对话框也就是此应用程序运行后显示的主要界面。

在资源视图下可以看到工程Addition的资源树,展开Addition.rc,下面有Dialog、Icon、String Table、和Version,分别是对话框、图标、字符串表和版本。

我们可以看到Dialog下面有两个对话框模板:IDD_ABOUTBOX、IDD_ADDITION_DIALOG,另外一个是后期加的,后面会讲到。第一个是“关于”对话框的模板:

后者是对话框的模板。ID是资源的唯一表示,一般ID代表的整数值由系统定义。

现在我们要把IDD_ADDITION_DIALOG这个对话框模板变成如下的形式,该如何去做呢?

操作很简单,找到工具箱,在工具箱内拉取文本框和控件以及button就可以了,如下:

“被加数”、“加数”、“和”这些都是静态文本框,它们后面跟的都是Edit Control,而计算就是Button,退出按钮是系统自动生成的。举个例子,我把Static Text选中以后,按住鼠标左键拖动到对话框中后,右键属性,得到如下面板:

也就是Caption可以改动自己给起个名字,其他的一些东西暂时可以不改,想具体了解功能的可自行百度。

给ID起名字的时候一定要有规律的起名字,不然到处混乱项目大起来就找不到了。。。。所有的静态框起的名字分别是: IDC_SUMMAND_STATIC、IDC_ADDEND_STATIC、IDC_SUM_STATIC

所有的控件起的ID名字分别是:IDC_SUMMAND_EDIT、IDC_ADDEND_EDIT、IDC_SUM_EDIT

计算这个按钮的ID是:IDC_ADD_BUTTON

这样界面就搭好了。因为项目Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg它是从CDialogEx类派生的,在vs2010中,一般对话框类都是继承自CDialogEx类。

二、为界面控件添加变量

搭建完界面以后其实并没有什么卵用,因为根本没有传值操作,也无法进行计算。我们需要把代码计算和MFC界面联系起来。

静态文本框只是起一个说明数据的意义,基本不会变,所以不用管。重点是后面编辑框的数据,是我们要填入的数值。

首先为被加数的编辑框IDC_SUMMAND_EDIT添加变量,选中编辑框,右键添加变量,变量名为m_editSummand,类的成员变量名一般以m_打头,以标识它是一个成员变量:

以此类推,给 IDD_ADDEND_EDIT添加double型变量m_editAddend、给IDD_SUM_EDIT添加double型变量m_editSum。在MFC机制中,控件和变量之间是怎样同步传值的呢?这是通过MFC对话框类自动生成的成员函数DoDataExchange()来实现的,也叫做对话框的数据交换和检验机制。我们进入到AddtionDlg.cpp中查看CAdditionDlg类中的DoDataExchange()函数的语句,这是自动生成的:

void CAdditionDlg::DoDataExchange(CDataExchange* pDX)
{//处理MFC默认的数据交换CDialogEx::DoDataExchange(pDX);//处理控件IDC_SUMMAND_EDIT和变量m_editSummand之间的数据交换DDX_Text(pDX, IDC_SUMMAND_EDIT, m_editSummand);//处理控件IDC_ADDEND_EDIT和变量m_editAddend之间的数据交换DDX_Text(pDX, IDC_ADDEND_EDIT, m_editAddend);//处理控件IDC_SUM_EDIT和变量m_editSum之间的数据交换DDX_Text(pDX, IDC_SUM_EDIT, m_editSum);
}

注意一点,在数据交换中,DoDataExchange()并不是被自动调用的,而是需要我们在程序中调用CDialogEx::UpdateData()函数,由UpdateData()函数再去自动调用DoDataExchange()的。

三、为控件添加消息处理函数

创建完对话框类和添加控件变量完事儿了,但是还是不能运行滴!因为我们还需要为控件添加消息处理函数。这是MFC的核心。

MFC为对话框和控件等定义了诸多消息,对它们操作时会触发消息,这些消息最终由消息处理函数处理。比如点击按钮时会产生BN_CLICKED消息,修改编辑框内容时会产生EN_CHANGE消息等,为了实现自己的效果,我们就需要实现相关消息处理函数。

首先,添加消息处理函数。我们在“计算”按钮上右键,添加事件处理程序,事件处理函数名叫做OnBnClickedAddButton:

然后代码就自动在AdditionDlg.cpp中生成了,如下:

void CAdditionDlg::OnBnClickedAddButton()
{// TODO:  在此添加控件通知处理程序代码//将各控件中的数据保存到相应的变量UpdateData(TRUE);//将被加数和加数的加和赋值给m_editSumm_editSum = m_editSummand + m_editAddend;//根据各变量的值更新相应的控件。和的编辑框会显示m_editSum的值UpdateData(FALSE);}

这时候这个小项目就能够运行啦!

拓展:

关于加法计算器的tab顺序问题,按快捷键ctrl+D就能看到tab顺序,按照自己的想法依次点击即可。

原文博主还讲解了模态对话框和非模态对话框。为了加深理解,我依然进行了操作。

四、添加自定义的对话框

Windows对话框分为两类:模态对话框和非模态对话框。所谓模态对话框就是当它弹出后,该应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。非模态对话框就是,当它弹出后,本程序其他窗口仍能响应用户输入。非模态对话框一般是用来显示提示信息等。加法计算器实际上就是一个模态对话框。

模态对话框是怎么弹出来的呢?这个要看Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数:

BOOL CAdditionApp::InitInstance()
{// 如果一个运行在 Windows XP 上的应用程序清单指定要// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,//则需要 InitCommonControlsEx()。  否则,将无法创建窗口。INITCOMMONCONTROLSEX InitCtrls;InitCtrls.dwSize = sizeof(InitCtrls);// 将它设置为包括所有要在应用程序中使用的// 公共控件类。InitCtrls.dwICC = ICC_WIN95_CLASSES;InitCommonControlsEx(&InitCtrls);CWinApp::InitInstance();AfxEnableControlContainer();// 创建 shell 管理器,以防对话框包含// 任何 shell 树视图控件或 shell 列表视图控件。CShellManager *pShellManager = new CShellManager;// 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));// 标准初始化// 如果未使用这些功能并希望减小// 最终可执行文件的大小,则应移除下列// 不需要的特定初始化例程// 更改用于存储设置的注册表项// TODO:  应适当修改该字符串,// 例如修改为公司或组织名SetRegistryKey(_T("应用程序向导生成的本地应用程序"));//定义对话框类CAdditionDlg的对象dlgCAdditionDlg dlg;//将dlg设为主窗口m_pMainWnd = &dlg;//弹出对话框dlg,并将DoModal函数的返回值(退出时点击按钮的ID)赋值给nResponseINT_PTR nResponse = dlg.DoModal();if (nResponse == IDOK){// TODO:  在此放置处理何时用//  “确定”来关闭对话框的代码}else if (nResponse == IDCANCEL){// TODO:  在此放置处理何时用//  “取消”来关闭对话框的代码}else if (nResponse == -1){TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");}// 删除上面创建的 shell 管理器。if (pShellManager != NULL){delete pShellManager;}// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,//  而不是启动应用程序的消息泵。return FALSE;
}

能够看出来,其实弹出对话框的关键函数就是DoModal()函数。我们做个实验来加深一下对这个函数的了解。就是为加法计算器程序添加一个对话框,以在计算之前询问用户是否确定要进行计算。 步骤如下:

1.添加Dialog模板,在资源视图下右键Dialog,插入Dialog,然后声明它的ID为IDD_TIP_DIALOG

2.对这个自定义的模板进行一波骚操作,改变界面

3.为该对话框创建类,选中对话框右键添加类即可,之前我们没有添加类是因为计算器那个对话框的类已经被系统自动生成了--CAdditionDlg。

我们发现有.h和.cpp文件了。我们的想法就是用户点击“计算”的时候弹出这个对话框,然后用户在这个对话框上点击“确定”的时候才得到结果,如果用户点击取消就不得到结果。

4.添加消息处理函数

肯定还是“计算”这个按钮需要改动消息处理函数,需要在这个函数里构造CTipDlg类的对象tipDlg,然后通过tipDlg.DoModal()弹出对话框,最后判断DoModal()函数的返回值是IDOK还是IDCANCEL来确定是否继续进行计算。函数如下:

void CAdditionDlg::OnBnClickedAddButton()
{// TODO:  在此添加控件通知处理程序代码//用于保存DoModal函数的返回值INT_PTR nRes;//构造对话框类CTipDlgCTipDlg tipDlg;//弹出对话框nRes = tipDlg.DoModal();if (IDCANCEL == nRes)return;UpdateData(TRUE);m_editSum = m_editSummand + m_editAddend;UpdateData(FALSE);
}

然后你会发现可以控制啦!好神奇的说呢~~

 感谢参考blog的博主,让我学到了很多~ღ( ´・ᴗ・` )比心


http://chatgpt.dhexx.cn/article/nYBDPj1r.shtml

相关文章

C++ MFC简介

介绍MFC之前,需要先介绍几个MFC的概念。 1) API Windows操作系统提供了各种各样的函数,以方便我们开发Windows应用程序。这些程序是Windows操作系统提供给应用程序编程的接口(Application Programming Interface),简称为API函数…

一、MFC介绍

一、什么是MFC MFC(全称:Microsoft Foundation Classes),微软基础类库。他封装了Windows应用程序的各种API以及相关机制的c++类库。 1、特点: (1)开发效率高 (2)程序执行效率高,相对C# (3)迁移性差(仅支持Windows)相对QT 二、MFC程序介绍 1、MFC类库常用头…

VS2015之博大精深的MFC项目开发(一)

VS2015之博大精深的MFC项目开发(一) 第一章 MFC基础篇1、MFC01-2:Win32程序资源管理1.1 讲解MessageBox(在windows中如何输出)1.2 给我们的软件插入一个图标1.3 对话框程序是如何建立的(在windows中如何输入…

简单MFC程序开发-C++反编译肉鸡养成

目录 一、需求 二、程序效果 效果1:鼠标左键点击,显示坐标 效果2:按下按键,显示键值 三、实现过程 1.创建MFC程序 2.修改添加功能 2.1 修改标题 2.2 增加鼠标消息 2.3 增加键盘消息 2.4 显示文字函数 2.5 编译生成exe 一…

MFC应用程序开发教程1

以下为本人学习笔记 原视频:黑马程序员MFC教程 一、基础概念 SDK:软件开发工具包(Software Development Kit),第三方工具API:Windows擦欧总系统提供给应用程序编程的接口窗口:一个Windows应用…

MFC程序开发概述

MFC程序开发概述 一:MFC类库的产生与发展 在Microsoft推出Windows 3.0之后,Windows操作系统受到越来越多的人的青睐。但是不久,开发人员开发撰写Windows 应用程序是重复,厌烦的过程,而且效率极低。因为每一个窗口都需…

Vim撤消和重做操作

While editing text files with vim we can make some little mistakes or want to revert to the previous states. In Microsoft Word there is features rich undo and revert functions. The similar undo and revert functionalities provided by vim too. 在用vim编辑文本…

idea如何使用git指令

(1)、打开setting,直接搜git (2)、点一下text 如果显示成功就不用管了,但如果失败就要重新设置一下目录: (3)、找到自己设置gitee ssh目录: 这里我们是不需要用.git对.idea进行管理的&#xff…

idea操作git流程(图文教程)

idea是jetbrain的一款java编辑器,jetbrain全家桶的编辑器都很好用,接下来就以图文的方式介绍,idea如何操作git 1. 首先你需要在自己电脑上安装一个Git,安装git的流程网上应该很多了,这里就跳过了,后续操作…

IDEA中使用Git的教程

&&前期准备工作 &配置git &配置Github 1.远程创建好GitHub仓库 2.打开Terminal窗口 3.创建README.md和.gitignore文件 $touch README.md $touch .gitignore xml .gitignore内容如下: *.class package files *.war *.ear kdiff3 ignore target/ ec…

在Idea中使用Git

一.在Idea中配置Git 安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安 装位置则需要手动配置下Git的路径。选择File→Settings打开设置窗口,找到Version Control下的git选 项&…

Git的理解以及在IDEA中的使用

目录 什么是版本控制 什么是Git 什么是GitHub Git、GitHub、Gitee的区别 git与GitHub GitHub和Gitee 下载安装Git IDEA中配置Git ​编辑 Gitee的使用 IDEA中使用 添加Gitee账号: 分享项目 设置仓库名字 更新项目 小组团队开发 成员拉取项目 数据库…

IDEA 中 Git的使用

1、Git简介 Git是目前流行的分布式版本管理系统。它拥有两套版本库,本地库和远程库,在不进行合并和删除之类的操作时这两套版本库互不影响。也因此其近乎所有的操作都是本地执行,所以在断网的情况下任然可以提交代码,切换分支。Gi…

IntelliJ IDEA 之 Git 使用

文章目录 1. 本地安装 Git2. IDEA 配置 Git3. 首次检出项目4. 项目分支创建5. 项目分支切换6. 项目刷新分支7. 分支代码提交8. 开发分支合并主分支代码9. 主分支合并开发分支代码10. 代码提交记录进行合并操作11. 常用操作的快捷方式12. 开发分支部分合并到主分支13. 主分支被强…

IDEA中项目集成git提交代码详细步骤

简介:在团队协作开发的过程中,好的代码管理能更加有效的使日常开发的过程中对各个开发人员提高开发速度。下面将详细介绍在IDEA中使用git提交代码的过程: IDEA中使用git提交代码 一:pull代码更新的结果:没有代码需要更…

关于idea使用git的简单说明

一、工具 1、安装git 2、idea 3、使用gitblit搭建服务器 可以参考这个文章:http://blog.csdn.net/u010690828/article/details/53735508 二、idea简单配置 首先idea需要设置git,按一下面步骤走 选择你安装的git, 注意:图上有两个选项&a…

如何在IDEA中使用Git

目录 01.在IDEA中配置Git02.在IDEA中使用Git将文件添加到暂存区03.在IDEA中使用Git将文件推送到远程仓库3.1.项目第一次推送至远程仓库报错问题解决: Push rejected: Push to origin/master was rejected 04.在IDEA中使用Git克隆远程仓库05.在IDEA中使用Git从远程仓…

在 IDEA 中使用 Git

1. 在IDEA中配置Git 点击 settings 找到 Version Control 下的 Git ,并把 git.exe 的路径(默认)选入 在IDEA中使用Git,本质上还是使用的本地安装的Git软件,所以需要在IDEA中配置Git 然后点击 Test ,出现版…

如何在IntelliJ IDEA中使用git

0.前言 本文主要讲述在IntelliJ IDEA中使用git的方法,git的原理、命令行使用及可视化图形工具的使用请听下回分解。 首先安装IntelliJ IDEA2018.2以及git 2.28.0 1.在IDEA中配置git 在File–>Settings–>Version Control中找到Git,或者直接搜索…

初次入职,git使用教程:如何在idea使用git拉取代码,提交代码,以及在gitlab上发起合并请求

git的使用相信是很多刚踏入程序员这一行朋友的痛点,刚入职的一段时间非常担心git用错,把别人的代码覆盖掉,下面我详细介绍一下如何在idea上使用git,拉取,提交代码,处理冲突,以及发起合并请求。 …