最近一段时间一直在做这个东西,刚刚拿到题目的时候认为这是一个简单的程序,可是随着编写程序的深入,发现这也不是一个很简单的程序,主要是需要考虑到一些连续加减以及混合运算的情况。
首先介绍一下这个小计算器的功能。其实也没有什么新的功能啦,只是有一些简单的+、-、*、/运算,能够完成混合运算,是一个标准型的计算器。
建立文件
(1)建立应用程序外壳
创建一个新的AppWizard项目,命名为shiyan,选择Dialog based;其他都选用默认属性,单击Finish完成生成应用程序的步骤。
进入对话框界面以后,按下图所示布置显示框和功能按钮,这个小计算器一共需要10个数字键,9个功能键两个文本框。(下面的显示窗口是在测试程序时用的跟踪窗口,一般的计算器可以删去)。
(2)设置窗口属性
将上面的显示框属性设置成为CString型,下面的跟踪显示框设置成为Double型,并且绑定两个变量给他们。分别是m_text(显示框),m_show(跟踪显示框)ID改成IDC_text,IDC_show。数字键的ID号更改成为IDC_OnX,Caption改为相应的数字。
(3)设置公有变量
这个程序中我用的公共变量比较得多,主要是因为我是新手吗!!下面是所有公有变量的列表:
要给公有变量赋值需要在 OnInitDialog()函数中赋值,而这个函数就是在运行对话框时首先要运行的初始化函数,现在给需要赋初值的公有变量赋初值。
-
-
-
-
-
-
-
(3)编写按钮程序
数字键
双击你所要编写的数字键进入相应的按键程序编写,例如1建,双击后编写程序:
-
-
-
-
-
-
-
-
-
-
-
a=ss.GetLength();//截取当前显示框字符串长度
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“+”号键程序:
-
-
-
-
-
-
-
-
if((sign==‘-‘)||(sign==‘*‘)||(sign==‘/‘))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“-”号键程序:
-
-
-
-
-
-
-
-
if((sign==‘+‘)||(sign==‘*‘)||(sign==‘/‘))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“*”号键程序:
-
-
-
-
-
-
-
-
if((sign==‘+‘)||(sign==‘-‘)||(sign==‘/‘))
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“.”键程序:
-
void CShiyanDlg::Onpoint()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
乘方键程序:
-
void CShiyanDlg::Onsqrt() //try again
-
-
-
-
ss.Format(_T("%f"),temp4);
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“+/-”键程序:
-
void CShiyanDlg::Onsign()
-
-
-
-
-
ss.Format(_T("%f"),temp2);
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“C”键程序:
-
void CShiyanDlg::OnCE() //C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-
“DEL”键程序:
-
-
-
-
-
-
-
-
ss.Format("%s",ss.Left(u));
-
-
-
// TODO: Add your control notification handler code here
-
-
“=”号建:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ss.Format(_T("%f"),temp4);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ss.Format(_T("%f"),temp4);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ss.Format(_T("%f"),temp4);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ss.Format(_T("%f"),temp4);
-
-
-
-
-
-
-
-
-
-
-
-
// TODO: Add your control notification handler code here
-
-