⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calculator.cpp

📁 基于EVC的一个计算器程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -