📄 scdlg.cpp
字号:
number1=m_number=(double)((exp(number1)+exp(-number1))/2);
if(bInv==TRUE&&bHyp==TRUE)
number1=m_number=(double)(log(number1+sqrt(pow(number1,2)-1)));
UpdateData(FALSE);
break;
case IDC_NUMBER_Sin:
if(bInv==TRUE&&bHyp==FALSE&&bRadian==TRUE)
number1=m_number=(double)asin(number1);
if(bInv==TRUE&&bHyp==FALSE&&bAngle==TRUE)
number1=m_number=(double)asin(number1*(PI/180));
if(bInv==FALSE&&bHyp==FALSE&&bRadian==TRUE)
number1=m_number=(double)sin(number1);
if(bInv==FALSE&&bHyp==FALSE&&bAngle==TRUE)
number1=m_number=(double)sin(number1*(PI/180));
if(bInv==FALSE&&bHyp==TRUE)
number1=m_number=(double)((exp(number1)-exp(-number1))/2);
if(bInv==TRUE&&bHyp==TRUE)
number1=m_number=(double)(log(number1+sqrt(pow(number1,2)+1)));
UpdateData(FALSE);
break;
case IDC_NUMBER_Lg ://lg
if(bInv==TRUE)
number1=m_number=(double)pow(number1,10);
else number1=m_number=(double)log10(number1);
UpdateData(FALSE);
if(m_switch==2)
number1=m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
number1=m_number=DateSwitch((int)m_number,10,8);
break;
case IDC_NUMBER_Ln: //ln
if(bInv==TRUE)
number1=m_number=(double)exp(number1);
else number1=m_number=(double)log(number1);
if(m_switch==2)
number1=m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
number1=m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case IDC_NUMBER_Log://log
cal();//如果连续运算
OperationState=11;
m_number=0;
NumberState=2;
UpdateData(FALSE);
case IDC_NUMBER_MC:
mem_number=0;
m_Mem=' ';
UpdateData(FALSE);
break;
case IDC_NUMBER_MR:
m_number=mem_number;
UpdateData(FALSE);
break;
case IDC_NUMBER_MS://将显示的数字保存
mem_number=m_number;
if(mem_number!=0) m_Mem='M';
UpdateData(FALSE);
break;
case IDC_NUMBER_M_Add:
mem_number+=m_number;
UpdateData(FALSE);
break;
case IDC_NUMBER_Derivative:
m_number=number1=(double)1/number1;
if(m_switch==2)
number1=m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
number1=m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case IDC_NUMBER_Mod://取模
cal();//如果连续运算
OperationState=6;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Or://按位或
cal();//如果连续运算
OperationState=7;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Lsh: //移位
cal();//如果连续运算
OperationState=8;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_And://按位与
cal();//如果连续运算
OperationState=9;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Xor://按位异或
cal();//如果连续运算
OperationState=10;
m_number=0;
NumberState=2;
break;
case IDC_NUMBER_Not: //按位取反
m_number=number1=~((int)number1);
if(m_switch==2)
number1=m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
number1=m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case IDC_NUMBER_Int :
if(bInv==TRUE)
m_number=number1=m_number-(int)m_number;//取小数部分
else m_number=number1=(int)m_number;//取整
if(m_switch==2)
number1=m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
number1=m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case IDC_NUMBER_Point://小数点
if(m_number!=(int)m_number)
{m_decimal=0;m_number=0;}//响应原有的小数
else m_decimal=0;
bPoint=TRUE;
UpdateData(FALSE);
break;
case IDC_Angle://角度
bAngle=TRUE;
bRadian=FALSE;
m_unit=0;
UpdateData(FALSE);
break;
case IDC_Radian://弧度
bRadian=TRUE;
bAngle=FALSE;
m_unit=1;
UpdateData(FALSE);
break;
case IDC_Inv://切换至取反
if(bInv==FALSE)bInv=TRUE;
else bInv=FALSE;
UpdateData(FALSE);
break;
case IDC_Hyp://切换至双曲函数
if(bHyp==FALSE)bHyp=TRUE;
else bHyp=FALSE;
UpdateData(FALSE);
break;
case IDC_NUMBER_Equal:
cal();
break;
}
}
void CSCDlg::cal()
{
switch(OperationState)
{
case 1:m_number=(double)number1/number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 2:m_number=number1*number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 3:m_number=number1+number2;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
NumberState=1;
UpdateData(FALSE);
break;
case 4:m_number=number1-number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 5:
if(bInv==TRUE)
m_number=pow(number1,(double)(1/number2));
else m_number=pow(number1,number2);
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 6:m_number=(int)number1%(int)number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 7:m_number=(int)number1|(int)number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 8:
if(bInv==TRUE)
m_number=(int)number1>>(int)number2;
else m_number=(int)number1<<(int)number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 9:m_number=(int)number1&(int)number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 10:m_number=(int)number1^(int)number2;
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
case 11:
if(bInv==TRUE) m_number=pow(number1,number2);
else m_number=(double)log10(number1)/(double)log10(number2);
NumberState=1;
if(m_switch==2)
m_number=DateSwitch((int)m_number,10,2);
if(m_switch==1)
m_number=DateSwitch((int)m_number,10,8);
UpdateData(FALSE);
break;
}
if(m_switch==0)
number1=m_number;//准备下次运算
OperationState=0;
}
int CSCDlg::factorial(int n)//阶乘函数
{
int f;
if(n<0) f=0;
else if(n==0)f=1;else f=n*factorial(n-1);
return f;
}
int CSCDlg::DateSwitch(int number, int old_unit, int new_unit)
{
int power_i=0,t=0,sum=0;
while(number!=0)
{
t=(int)number%new_unit;
number=(int)(number/new_unit);
sum+=(int)(t*pow(old_unit,power_i));
power_i++;
}
return sum;
}
void CSCDlg::OnBin()
{
// TODO: Add your control notification handler code here
if(m_switch==1)
{m_number=DateSwitch((int)m_number,8,10);
m_number=DateSwitch((int)m_number,10,2);}
if(m_switch==0) m_number=DateSwitch((int)m_number,10,2);
CWnd *pWndButton;
pWndButton=GetDlgItem(IDC_NUMBER9);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER8);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER7);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER6);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER5);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER4);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER3);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER2);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_pi);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Point);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Tan);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Cos);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Sin);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_Angle);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_Radian);
pWndButton->EnableWindow(FALSE);
m_switch=2;//使二进制选中
UpdateData(FALSE);
}
void CSCDlg::OnOctal()
{
// TODO: Add your control notification handler code here
if(m_switch==2)
{m_number=DateSwitch((int)m_number,2,10);
m_number=DateSwitch((int)m_number,10,8);}
if(m_switch==0) m_number=DateSwitch((int)m_number,10,8);
CWnd *pWndButton;
pWndButton=GetDlgItem(IDC_NUMBER9);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER8);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER7);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER6);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER5);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER4);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER3);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER2);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_pi );
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Point);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Tan);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Cos);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_NUMBER_Sin);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_Angle);
pWndButton->EnableWindow(FALSE);
pWndButton=GetDlgItem(IDC_Radian);
pWndButton->EnableWindow(FALSE);
m_switch=1;//使八进制选中
UpdateData(FALSE);
}
void CSCDlg::OnDecimal()
{
// TODO: Add your control notification handler code here
if(m_switch==1) m_number=DateSwitch((int)m_number,8,10);
if(m_switch==2) m_number=DateSwitch((int)m_number,2,10);
CWnd *pWndButton;
pWndButton=GetDlgItem(IDC_NUMBER9);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER8);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER7);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER6);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER5);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER4);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER3);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER2);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_pi );
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_Point);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_Tan);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_Cos);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_NUMBER_Sin);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_Angle);
pWndButton->EnableWindow(TRUE);
pWndButton=GetDlgItem(IDC_Radian);
pWndButton->EnableWindow(TRUE);
m_switch=0;//使十进制选中
UpdateData(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -