📄 calculator.cpp
字号:
case WM_KEYDOWN:
// MessageBox(hwnd,"sldkjf","ksdfj",MB_OK);
switch(LOWORD(wParam))
{
case VK_0: wParam=VK_NUMPAD0; break;
case VK_1: wParam=VK_NUMPAD1; break;
case VK_2: wParam=VK_NUMPAD2; break;
case VK_3: wParam=VK_NUMPAD3; break;
case VK_4: wParam=VK_NUMPAD4; break;
case VK_5: wParam=VK_NUMPAD5; break;
case VK_6: wParam=VK_NUMPAD6; break;
case VK_7: wParam=VK_NUMPAD7; break;
case VK_8: wParam=VK_NUMPAD8; break;
case VK_9: wParam=VK_NUMPAD9; break;
case VK_PERIOD: wParam=VK_DECIMAL; break;
default: break;
}
// break;
case WM_COMMAND:
if(HIWORD(wParam)==EN_SETFOCUS) SetFocus(hwnd);
switch(LOWORD(wParam))
{
// 零至玖与点按钮
// case IDE_RESULT: SetFocus(hwnd);break;
case IDB_NUM0:
if (nOptF==0)
{
SetWindowText(hEditResult,TEXT("0"));
break;
}
NumResult(TEXT("0"));
SetFocus(hwnd);
break;
case IDB_NUM1:
NumResult(TEXT("1"));
SetFocus(hwnd);
break;
case IDB_NUM2:
NumResult(TEXT("2"));
SetFocus(hwnd);
break;
case IDB_NUM3:
NumResult(TEXT("3"));
SetFocus(hwnd);
break;
case IDB_NUM4:
NumResult(TEXT("4"));
SetFocus(hwnd);
break;
case IDB_NUM5:
NumResult(TEXT("5"));
SetFocus(hwnd);
break;
case IDB_NUM6:
NumResult(TEXT("6"));
SetFocus(hwnd);
break;
case IDB_NUM7:
NumResult(TEXT("7"));
SetFocus(hwnd);
break;
case IDB_NUM8:
NumResult(TEXT("8"));
SetFocus(hwnd);
break;
case IDB_NUM9:
NumResult(TEXT("9"));
SetFocus(hwnd);
break;
case IDB_NUMDEC:
if (bDec==true)
{
SetFocus(hwnd);
break;
} //如果已按了点号就返回
NumResult(TEXT("."));
nOptF=1; //按了操作符键
bDec=true; //按了点操作符;
SetFocus(hwnd);
break;
//MessageBox(hwnd,"没有此功能!","功能",MB_OK);
break;
// 加,减,乘,除与百分数按钮
case IDB_OPTADD:
EquResult();
wcscpy(lpszOpt,TEXT("+")); //设置按了操作符号+
SetFocus(hwnd);
break;
case IDB_OPTSUB:
EquResult();
wcscpy(lpszOpt,TEXT("-"));
SetFocus(hwnd);
break;
case IDB_OPTMUL:
EquResult();
wcscpy(lpszOpt,TEXT("*")); //设置按了操作符号*
nResult2=1;
wcscpy(lpszResult2,TEXT("1"));
SetFocus(hwnd);
break;
case IDB_OPTDIV:
//算出结果
EquResult();
wcscpy(lpszOpt,TEXT("/"));
nResult2=1;
wcscpy(lpszResult2,TEXT("1"));
SetFocus(hwnd);
break;
case IDB_OPTPERCENT: //设置了操作符号%
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
nResult1=1.0/wcstod(lpszResult1,&stop);
nResult1=nResult1*1.0;
_gcvt(nResult1,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult1);
SetWindowText(hEditResult,lpszResult1);
}
else
{
nResult2=wcstod(lpszResult2,&stop)/100;
nResult2=nResult2*1.0;
_gcvt(nResult2,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult2);
SetWindowText(hEditResult,lpszResult2);
}
nOptF=0;
SetFocus(hwnd);
break;
// 等于按钮
case IDB_OPTEQU:
//算出等于结果
EquResult();
wcscpy(lpszOpt,TEXT("N"));
SetFocus(hwnd);
break;
//开平方按钮
case IDB_OPTSQRT:
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
nResult1=wcstod(lpszResult1,&stop);
nResult1=nResult1*1.0;
if(nResult1<0)
{
MessageBox(hwnd,_T("负数不能开平方"),_T("警告"),MB_ICONWARNING);
SetFocus(hwnd);
break;
}
else
{
nResult1=sqrt( nResult1 );
_gcvt(nResult1,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult1);
SetWindowText(hEditResult,lpszResult1);
}
}
else
{
nResult2=wcstod(lpszResult2,&stop);
nResult2=nResult2*1.0;
if(nResult2<0)
{
MessageBox(hwnd,_T("负数不能开平方"),_T("警告"),MB_ICONWARNING);
break;
}
nResult2=sqrt( nResult2);
_gcvt(nResult2,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult2);
SetWindowText(hEditResult,lpszResult2);
}
nOptF=0;
SetFocus(hwnd);
break;
// 平方
case IDB_MM://SetFocus(hwnd);
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
nResult1=wcstod(lpszResult1,&stop);
nResult1=nResult1*1.0;
nResult1*=nResult1;
_gcvt(nResult1,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult1);
SetWindowText(hEditResult,lpszResult1);
}
else
{
nResult2=wcstod(lpszResult2,&stop);
nResult2=nResult2*1.0;
nResult2*=nResult2;
_gcvt(nResult2,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult2);
SetWindowText(hEditResult,lpszResult2);
}
nOptF=0;
SetFocus(hwnd);
break;
//取反
case IDB_AS:
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
nResult1=wcstod(lpszResult1,&stop);
nResult1=nResult1*1.0;
nResult1=0-nResult1;
_gcvt(nResult1,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult1);
SetWindowText(hEditResult,lpszResult1);
}
else
{
nResult2=wcstod(lpszResult2,&stop);
nResult2=nResult2*1.0;
nResult2=0-nResult2;
_gcvt(nResult2,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult2);
SetWindowText(hEditResult,lpszResult2);
}
nOptF=0;
SetFocus(hwnd);
break;
case IDB_BK:
// MessageBox(hwnd,TEXT("D"),TEXT("KDF"),MB_OK);
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
lpszResult1[wcslen(lpszResult1)-1]=TEXT('\0');
nResult1=wcstod(lpszResult1,&stop);
nResult1=nResult1*1.0;
SetWindowText(hEditResult,lpszResult1);
}
else
{
lpszResult2[wcslen(lpszResult2)-1]=TEXT('\0');
nResult2=wcstod(lpszResult2,&stop);
nResult2=nResult1*1.0;
SetWindowText(hEditResult,lpszResult2);
}
SetFocus(hwnd);
break;
case IDB_CANCLEENTRY:
SetWindowText(hEditResult,TEXT("0"));
nResult=0;
nAddItem=0;
nResult1=0;
nResult2=0;
wcscpy(lpszResult1,TEXT("0"));
wcscpy(lpszResult2,TEXT("0"));
nOptF=0;
bDec=false;
wcscpy(lpszOpt,TEXT("N")); //贮存操作符号
SetFocus(hwnd);
break;
//关于菜单
case IDM_ABOUT:
MessageBox(hwnd,_T("欢迎使用!\nWELCOM!!!\n\n%键对应键盘上d键\nsqr对应键盘上s键"),_T("关于"),MB_OK|MB_ICONINFORMATION);
break;
//退出菜单
case IDM_EXIT:
SendMessage(hwnd,WM_DESTROY,0,0L);
break;
// case IDE_RESULT: SetFocus(hwnd);break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
// SetFocus(hwnd);
return DefWindowProc(hwnd,message,wParam,lParam);
}
SetFocus(hwnd);
return 0;
}
//-----------------------按下操作符(+,-,*,/,sqrt,%,=)处理函数-----------------------
void EquResult()
{
//算出结果
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
nResult1=wcstod(lpszResult1,&stop);
}
else
{
switch(*lpszOpt) //比较上一次按的操作符后所得的结果
{
case '+':
nResult1=wcstod(lpszResult1,&stop);
nResult2=wcstod(lpszResult2,&stop);
nResult1=nResult1+nResult2;
break;
case '-':
nResult1=wcstod(lpszResult1,&stop);
nResult2=wcstod(lpszResult2,&stop);
nResult1=nResult1-nResult2;
break;
case '*':
nResult1=wcstod(lpszResult1,&stop);
nResult2=wcstod(lpszResult2,&stop);
nResult1=nResult1*nResult2;
break;
case '/':
nResult1=wcstod(lpszResult1,&stop);
nResult2=wcstod(lpszResult2,&stop);
if (nResult2==0)
{
MessageBox(hWndhWnd,_T("除数不能为零!"),_T("功能"),MB_OK);
break;
}
nResult1=nResult1/nResult2;
break;
}
}
nResult1=nResult1*1.0;
nResult2=0;
wcscpy(lpszResult2,TEXT("0"));
/* if(wcscmp(lpszOpt,TEXT("+"))||wcscmp(lpszOpt,TEXT("-")))
{
nResult2=0;
wcscpy(lpszResult2,TEXT("0"));
}
else
{
nResult2=1;
wcscpy(lpszResult2,TEXT("1"));
}*/
_gcvt(nResult1,15,temp); //双精度转化为字符串
asc_uni(temp,lpszResult1);
SetWindowText(hEditResult,lpszResult1);
nOptF=0;
bDec=false;
}
//--------------------------按下数字键(0~9和小数点)的操作处理函数--------------------
void NumResult(TCHAR *NumData)
{
if (nOptF==0)
SetWindowText(hEditResult,TEXT(""));
nMax=GetWindowTextLength(hEditResult)+1;
GetWindowText(hEditResult,lpszAddItem,nMax);
wcscat(lpszAddItem,NumData); ///字符串加该数字键的字符
if (wcscmp(lpszOpt,TEXT("N"))==0)
{
wcscpy(lpszResult1,lpszAddItem);
SetWindowText(hEditResult,lpszResult1);
}
else
{
wcscpy(lpszResult2,lpszAddItem);
SetWindowText(hEditResult,lpszResult2);
}
nOptF=1; //按下了数字键
}
void asc_uni(char *lpasc,wchar_t*lpuni) //传入ASCII码字符串,变为UNICODE码后传回
{
// wchar_t uni_temp[20];
int i;
for(i=0;i<25;i++)
lpuni[i]=(wchar_t)lpasc[i];
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -