1.首先开机(废话),进入Windows XP或其它(废话),打开Visual C++ 6.0(以下删除废话两万字),使用AppWizard生成一个基于对话框的应用程序,并给主窗口对话框取名Calculate。
2.编辑对话框
包含1个编辑控件、16个按钮。如下图:
属性设置:
控件类型 Caption 属性 ID号
Edit Box -- Read Only、右对齐 IDC_EDIT
Button + - * / 默认 IDC_ADD/IDC_SUB/IDC_MUL/IDC_DIV
Button 0~9 默认 IDC_B0~B9
Button CE 默认 IDC_RESET
Button = 默认 IDC_EQUAL
3.使用ClassWizard为编辑框控件在Calculate对话框类中连接long型成员变量 m_data(用于接收EDIT控件的值)。
4.分别为16个按钮控件在对话框类中添加映射消息处理函数。映射事件都为BN_CLICKED,名字均为ON****
5.在Calculate类中添加数据成员,如下表所示,并在初始构造函数中设置数据成员的初值。
声明变量位置:《Calculate.h》 可以打开类面板,右击ccalculatedlg类选择Add member variable进行添加。
class CCalculateDlg : public CDialog
{
// Construction
public:
CCalculateDlg(CWnd* pParent = NULL); // standard constructor
// Dialog Data
//{{AFX_DATA(CCalculateDlg)
enum { IDD = IDD_CALCULATE_DIALOG };
long m_result;
int m_flag;
int m_flgoperate;
//}}AFX_DATA
类型 变量名称 初值 说明
long m_result 0 存放运算的结果
int m_flag 1 表示运算类型,1:加法,2:减法,3:乘法,4:除法
int m_flgoperate 0 表示运算的操作按钮被单击之后,下一次单击数字里清空数据
初始化三个变量的位置: 《CalculateDlg.cpp》
CCalculateDlg::CCalculateDlg(CWnd* pParent /*=NULL*/)
: CDialog(CCalculateDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCalculateDlg)
m_data = 0;
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_result=0;
m_flag=1;
m_flgoperate=0;
m_data=0;
}
6.编制 pressnum 函数和pressoperator 函数,位置 :《Calculate.h 》紧接在上面的四个变量之后,可以在类面板中右击ccalculatedlg类,选择Add member function进行添加函数。
class CCalculateDlg : public CDialog
{
。。。。。
protected:
void pressnum(int num) {//表示处理单击数字按钮的通用操作,num表示0~9的数字
if (m_flgoperate==1) //表示刚按下运算键之后,开始输入一个新的数字,编辑框为0
{ m_data=0;
m_flgoperate=0;}
m_data=m_data*10+num; //连续输入数字时,以十进制相加
UpdateData(false);
}
void pressoperate(int n) { //表示处理单击运算按钮的通用操作
if (m_flgoperate==0)
{
UpdateData(true);
switch(m_flag)
{ case 1: m_result+=m_data; //表示加运算
m_data=m_result;
break;
case 2: m_result-=m_data; //表示减运算
m_data=m_result;
break;
case 3: m_result*=m_data; //表示乘运算
m_data=m_result;
break;
case 4: if (m_data==0) //表示除运算
{AfxMessageBox("Cannot divide by zero"); //分母不能为0,否则零溢出
m_result=0;}
else
{m_result/=m_data;
m_data=m_result;}
break;}
}
m_flag=n;
m_flgoperate=1;
UpdateData(false);
}
7.下面就是为16个按钮编制单击按钮的消息处理函数
void CCalculateDlg::OnB0()
{
pressnum(0);
}
void CCalculateDlg::OnB1()
{
// TODO: Add your control notification handler code here
pressnum(1);
}
void CCalculateDlg::OnB2()
{
// TODO: Add your control notification handler code here
pressnum(2);
}
void CCalculateDlg::OnB3()
{
// TODO: Add your control notification handler code here
pressnum(3);
}
void CCalculateDlg::OnB4()
{
// TODO: Add your control notification handler code here
pressnum(4);
}
void CCalculateDlg::OnB5()
{
// TODO: Add your control notification handler code here
pressnum(5);
}
void CCalculateDlg::OnB6()
{
// TODO: Add your control notification handler code here
pressnum(6);
}
void CCalculateDlg::OnB7()
{
// TODO: Add your control notification handler code here
pressnum(7);
}
void CCalculateDlg::OnB8()
{
// TODO: Add your control notification handler code here
pressnum(8);
}
void CCalculateDlg::OnB9()
{
// TODO: Add your control notification handler code here
pressnum(9);
}
void CCalculateDlg::OnAdd()
{
// TODO: Add your control notification handler code here
pressoperate(1);
}
void CCalculateDlg::OnDiv()
{
// TODO: Add your control notification handler code here
pressoperate(4);
}
void CCalculateDlg::OnEqual() //处理=号的单击操作
{
// TODO: Add your control notification handler code here
UpdateData(true);
switch(m_flag)
{ case 1: m_data+=m_result;break;
case 2: m_result-=m_data;m_data=m_result;break;
case 3: m_result*=m_data;m_data=m_result;break;
case 4: if (m_data==0)
AfxMessageBox("Cannot divide by zero!");
else {
m_result/=m_data;
m_data=m_result;}
break;}
UpdateData(false);
m_result=0;
m_data=0;
m_flgoperate=0;
m_flag=1;
}
void CCalculateDlg::OnMul()
{
// TODO: Add your control notification handler code here
pressoperate(3);
}
void CCalculateDlg::OnReset()
{
// TODO: Add your control notification handler code here
m_result=0;
m_data=0;
m_flag=1;
m_flgoperate=0;
UpdateData(false);
}
void CCalculateDlg::OnSub()
{
// TODO: Add your control notification handler code here
pressoperate(2);
}
8.编译运行,最终效果: