当前位置:文档之家› 手把手教你MFC编程计算器制作教程

手把手教你MFC编程计算器制作教程


手把手教你 MFC 编程计算器
第 2页 / 共 23页
此时我们把当前页面上原配的控件按 Delete 全部清除(如下图)
手把手教你 MFC 编程计算器
第 3页 / 共 23页
接着我们按照 MFC 自带的控件选项进行我们本次计算器的控件添加(以下是控件)
手把手教你 MFC 编程计算器
第 4页 / 共 23页
手把手教你 MFC 编程计算器
第 20页 / 共 23页
用 if 语句去判断标记常量 nEditFlag 从而给判断是 m_num1 还是 m_num2 进行操作 这里 m_num1 是编辑框 1 内的数字 m_num2 是编辑框 2 内的数字 剩下了 3~9 代码以上大同小异。
手把手教你 MFC 编程计算器
那么我们想,在日常我们用电脑的过程中,一般都是用鼠标去点击编辑框来进行一系 列操作。那么我可以加入一个鼠标左键点击 WM_LBUTTONDOWN 消息和一个 EN_SETFOCUS 事
手把手教你 MFC 编程计算器
第 16页 / 共 23页
件来响应这个鼠标消息。 EN_SETFOCUS 为判断焦点事件(通俗点说,那便是判断光标在什 么地方)
之后就会跳转到具体的代码实现过程 这里我们依次给每一个控件添加消息响应函数 (以下仅列出一部分)
手把手教你 MFC 编程计算器
第 7页 / 共 23页
手把手教你 MFC 编程计算器
第 8页 / 共 23页
到此为止 我们基本上完成了计算器页面的前半部分预备工作,下来是我们的对控件具体实 现代码的添加
手把手教你 MFC 编程计算器
double n_result; n_result = m_num1 + m_num2; m_result = n_result; char sz[20]; sprintf(sz,"%f",m_result); m_CResult.SetWindowText(sz); }
手把手教你 MFC 编程计算器
第 11页 / 共 23页
////////////////////////////////////////////////////////////////////////// STEP 2(控件消息响应函数具体代码添加部分)
首先从加法开始 void CMyDlg::OnButton1() { // TODO: Add your control notification handler code here UpdateData();
如下图
手把手教你 MFC 编程计算器
第 17页 / 共 23页
设置好之后,我们还要做一些初始化工作,在程序运行之初,我们先初始化 nEditFlag = 0;那么在哪里初始化呢?很简单,正如大家想的一样在 OnInitDialog()内进行初始化 我们只需在 OnInitDialog()函数中 加入一句 nEditFlag = 0;便可以了(如下图黑条字体部分)
手把手教你 MFC 编程计算器
} void CMyDlg::OnButton3() { // TODO: Add your control notification handler code here U pdateData(); double n_result; n_result = m_num1 * m_num2; m_result = n_result; char sz[20]; s printf(sz,"%f",m_r esult); m _CResult.SetWindow Text(sz); } void CMyDlg::OnButton4() { // TODO: Add your control notification handler code here U pdateData(); double n_result; n_result = m_num1 / m_num2; m_result = n_result; char sz[20]; s printf(sz,"%f",m_r esult); m _CResult.SetWindow Text(sz); }
手把手教你 MFC 编程计算器
第 18页 / 共 23页
/////////////////////////////////////////////////////////////////////////////// /
之后我们再为两个事件响应函数进行 OnsetfocusEdit1()和 OnsetfocusEdit2()添加 代码
具体添加方法,就是右键主对话框 CMyDlg->Add Member Variable 也可以是在菜单栏中选择 “查看”->“建立类向导”
手把手教你 MFC 编程计算器
第 10页 / 共 23页
这里我们把 3 个编辑框控件内的变量都改变为 double 型的(因为进行四则运算难免出现小 数点) 之后再在控件 IDC_EDIT3 中选择"Add Variable" 并且数据类型选择 Control 类型 此时变量自动改为了 CEdit 类 这步的意思是说 我们把编辑框控件 3 的设置为 CEdit 类 并且设置一个成员对象是 m_CResult。
完成修改 ID 后,就需给控件添加消息响应了,基本操作可以是直接双击控件,便会有向导 提示。
MFC 默认下了的响应信息都为 On_开头,而且以下显示的是数字 5 的消息响应.之后所有的 依次类推,这步骤一般不
对成员函数名称做任何修改,直接点击 OK 即可
手把手教你 MFC 编程计算器
第 6页 / 共 23页
手把手教你 MFC 编程计算器
第 19页 / 共 23页
当用户选定编辑框 1 的时候,nEditFlag = 1; 当用户选定编辑框 2 的时候,nEditFlag = 2;
而鼠标消息 WM_LBUTTONDOWN 具体代码如下
////////////////////////////////////////////////////////////////////////////// STEP 3(按键 0~9 的响应部分) 这里由于代码都大同小异,所以就用数字按钮 1,2 来进行简要说明
每个控件“属性”都有属于它自己的 ID,默认的按钮按键为 IDC_BUTTON0,而且 Cap 当然我 们为了“顾名思义”,对控件 ID 进行修改成我们容易辨认的(也可以不改),添加完控件 并修改 ID 之后。(如下图)
这里我们把数字按钮 0 设置 ID 为 IDC_BUTTON14_NUM0,其他的依次类推
手把手教你 MFC 编程计算器
第 1页 / 共 23页
STEP 1(页面设计部分与控件添加部分)
首先打开 VC,选择 MFC AppWizard[exe],设定好路径和工程名(这里我设置工程名为 为“My”)。这里要注意的是在创建向导步骤 1 的时候,我们选择“基本对话 框”。
之后我们可以点击完成便看到以下界面
第 21页 / 共 23页
这里进行一个说明
m_num2=m_num2*10+1; 很多人会问这步是说明意思,这步乍看貌似有点一头雾水(当初我 也是这样)但是仔细看看还是能看明白的。
比方说 用户想打出自然数“234” 用户第一次点的数字是 2 那么此时对应代码执行是这段 m_num2=m_num2*10+2; 那么 m_num2 = 0*10 +2 (初始化时 m_num2 = 0) 之后如果在点击 3 的时候执行的代码是 m_num2=m_num2*10+3; (此时经过第一步 m_num2 已经为 2 了,再点了 3 结果为 m_num2= 2*10+3 = 23) 最后点击 4 执行的代码是 m_num2=m_num2*10+4;(23*10 +4=234)
void CMyDlg::OnButton2() { // TODO: Add your control notification handler code here U pdateData(); double n_result; n_result = m_num1 - m_num2; m_result = n_result; char sz[20]; s printf(sz,"%f",m_r esult); m _CResult.SetWindow Text(sz);
这里我把添加的控件消息响应函数列出来
这里忘记了,提醒一点 编辑框控件的 ID 是
手把手教你 MFC 编程计算器 I DC_EDIT1 I DC_EDIT2 I DC_EDIT3
第 9页 / 共 23页
还有 加减乘除的控件添加当初没有进行名字的设置 默认为 void CMyDlg::OnButton1()//加 void CMyDlg::OnButton2()//减 void CMyDlg::OnButton3()//乘 void CMyDlg::OnButton4()//除 //////////////////////////////////////////////////// 在开始第二步之前有一项工作时必须要做的,那便是添加 3 个成员变量和一个 CEdit 类的 变量
第 14页 / 共 23页
手把手教你 MFC 编程计算器
第 15页 / 共 23页
Hale Waihona Puke 这里我特地说明一下由于我们预设了 2 个编辑框所想实现的功能是,如在编辑框 1 内输入一个输入 30,然 后再编辑框 2 内输入另一个数字 20,并且再进行运算。那么存在一个问题。这个问题其实 困惑了我很久,那就是,如何用判断用户是在哪个编辑框上输入了数字,所以我们需要给 程序加入一个功能,那便是判断用户是在编辑框 1 输入,还是编辑框 2 内输入。
这样一来,一切逻辑都理顺了。我们用户用鼠标选择并点击编辑框的时候,我们用 WM_LBUTTONDOWN 消息去响应,然后与此同此,我们把响应的和 EN_SETFOCUS 联系起来,我 们预设一个全局变量 nEditFlag ,作为在 EN_SETFOCUS 函数里的一个 标记,并在鼠标点 下的时候用 nEditFlag 去表示编辑框目前被选定的状态,nEditFlag ==1 的时候我们就判 断用户选择了编辑框 1 ,再者当 nEditFlag ==2 的时候说明编辑框 2 被选定。
相关主题