第一范文网 - 专业文章范例文档资料分享平台

手把手教你MFC编程计算器

来源:用户分享 时间:2025/5/25 9:40:22 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

这里进行一个说明

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)

通过以上小例子 大家明白了吧~ 为什么要 “先乘以10 再加 数字”

////////////////////////////////////////////////////////////////////

总结,其实这次非主流计算器编写,(说是非主流,说白了就是有2个编辑框输入数字,人家XP只有1个编辑框

)。最大的障碍就是唯独是那个EN_SETFOCUS这个函数的

空白了。我只单存的百度到GetFocus()能获得焦点,但是其实问题远远并没有那么简单,涉及到很多问题。

我当初设置判断的时候还不知道用一个EN_SETFOCUS,并且初始化标记这个方法,过后才知道。我把之前的错误帖一下顺便是当作是一个警告

void CMyDlg::OnButton14Num0() {

// TODO: Add your control notification handler code here UpdateData(TRUE);

if( GetDlgItem(IDC_EDIT1)->GetFocus()) {

m_num1=m_num1*10+0; }

else if( GetDlgItem(IDC_EDIT2)->GetFocus()) {

m_num2=m_num2*10+0; }

UpdateData(FALSE); }

////////////////////////////// 分析

GetDlgItem()如果大家不熟悉的话 我可以先解释一下是获得编辑框

首先GetDlgItem(IDC_EDIT1)获取了ID为IDC_EDIT1也就是编辑框CEdit类的对象的指针,继承了CWnd类

函数GetFocus是CWnd中的静态函数,来看一下函数原型:static CWnd* PASCAL GetFocus( ); 返回值是CWnd* 类型的,也就是说如果当前对话框或是控件被focus,那么就返回这个对话框或控件的指针.我错误的在if语句中将这个指针返回值当作了判断条件,所以呢,如果指针为NULL则if不执行,否则if就会执行。因为CEdit是一个控件类,其父窗口是有的,就是计算器的主窗口。所以当程序运行的时候,无论是第一个编辑框被focus或是第二个编辑框被focus,只要主对话框被focus了,那么调用GetDlgItem(IDC_EDIT1)->GetFocus())还是调用GetDlgItem(IDC_EDIT2)->GetFocus())还是直接调用this->GetFocus()它们的返回值都是一样的,就是父对话框的指针。当然不为NULL,所以第一个if就会执行。所以就显示在第一个编辑框了。

搜索更多关于: 手把手教你MFC编程计算器 的文档
手把手教你MFC编程计算器.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5ulmb0ep0y1wxgu8jpr7_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top