|
3驿站币
一开始点退格,小数点,清空,逆运算都无法实现是什么原因
void CBKWDlg::OnNumberKey(UINT nID)
{
int n=0;
switch(nID)
{
case IDC_BUTTON0:n=0;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON1:n=1;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON2:n=2;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON3:n=3;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON4:n=4;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON5:n=5;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON6:n=6;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON7:n=7;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON8:n=8;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
case IDC_BUTTON9:n=9;GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;break;
}
if(m_num>=0)
m_result=m_num*10+n;
else
m_result=m_num*10-n;
m_num=m_result;
UpdateData(FALSE);
}
void CBKWDlg::OnOperationKey(UINT nID)
{
switch(nID)
{
case IDC_D1:
num1 = m_num;
m_num=0;
operation_type = ADD ;
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
break;//加
case IDC_D2:
num1 = m_num;
m_num=0;
operation_type = SUB ;
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
break;//减
case IDC_D3:
num1 = m_num;
m_num=0;
operation_type = MUL ;
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
break;//乘
case IDC_D4:
num1 = m_num;
m_num=0;
operation_type = DIV ;
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
break;//除
case IDC_D5:
m_num= - atof( num_buffer ) ;
// 转化为字符串
num_buffer.Format( _T("%0.0f"), m_num );
GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;
break;//正负号
case IDC_D6:
if ( num_buffer.IsEmpty() )
{
num_buffer = "0." ;
}
else if ( num_buffer.ReverseFind('.') == -1 )
{
num_buffer += "." ;
}
GetDlgItem( IDC_EDIT_SHOW)->SetWindowText( num_buffer ) ;
break;//小数点
case IDC_D7:
num1 = num2 = 0.0 ;
m_num = 0.0 ;
// 清空显示数据
num_buffer.Empty() ;
GetDlgItem( IDC_EDIT_SHOW)->SetWindowText("0");break;//清除
case IDC_D8:
if( !num_buffer.IsEmpty() )
num_buffer.Delete(num_buffer.GetLength() - 1 , 1) ;
this->fresh() ;
break;//退格
}
}
void CBKWDlg::OnD9()
{
const double EPSINON = 0.000001 ;
bool error = false ;
this->num2 = m_num;
this->m_result=0;
switch( this->operation_type )
{
case ADD :
this->m_num = num1 + num2 ;
break;
case SUB :
this->m_num = num1 - num2 ;
break;
case MUL :
this->m_num = num1 * num2 ;
break;
case DIV :
if ( (num2 > -EPSINON ) && (num2 <= EPSINON) )
{
num_buffer="error";
error = true ;
}
else
{
this->m_num = num1 / num2 ;
}
break;
default:
this->m_result= this->num2 ;
break;
}
if ( !error )
{
num_buffer.Format( _T("%0.0f") , m_num) ;
}
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
this->operation_type =0;
this->m_num=0;
num_buffer="";
}
void CBKWDlg::check()
{
if ( !this->unary_operation )
{
// 若没有在进行一元运算时,下次输入前清空缓存
this->num_buffer.Empty() ;
// 打开一元运算
this->unary_operation = true ;
}
if ( !this->binary_operation )
{
// 若没有在进行二元运算时,下次输入前清空缓存
this->num_buffer.Empty() ;
// 打开二元运算
this->binary_operation = true ;
}
}
void CBKWDlg::fresh()
{
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(num_buffer) ;
}
void CBKWDlg::fresh(CString show)
{
GetDlgItem(IDC_EDIT_SHOW)->SetWindowText(show) ;
}
D1-D9分别是+- * / 逆运算 小数点 清空 退格 等于 |
上一篇: 求c或c++单线程坦克大战坦克移动和子弹移动的处理方式下一篇: 新人在编程中发现问题,望大神解答谢谢!
|