一个能够实现简单功能的计算器

 我也是win API的一个菜鸟,也是刚刚接触win API编程,自己练习制作了一个能够实现简单功能的计算器,在制作的过程中还是遇到了很多的问题,在这里和大家分享一下,希望能对初学者带来帮助,当然,也希望大家多提意见,完善它的功能,共同学习,共同进步!!!

#include "stdafx.h"
#include <windows.h>
#include <windowsx.h>
#include "resource.h"
#include "MainDlg.h"
#include "stack1.h"
#define N 20

    SqStack1 Sq;
 SqStack1 Ss;
 SqStack1 Data1;
 SqStack1 Data2;
 


BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
        HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog);
        HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand);
  HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose);
    }
 
    return FALSE;
}

BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
 
 
 InitStack(&Sq);
 InitStack(&Ss);
 InitStack(&Data1);
 InitStack(&Data2);
    return TRUE;
}
// id这个参数是windows 送过来的;
// 不同的控件要有不同的id  ;


void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify)
{

 

 


 
 
    switch(id)
    {
  

  //int p;
  //Pop(&Sp,&p);
  TCHAR str1[256];
  TCHAR str2[256];
  TCHAR str3[256];
  case IDC_BUT1:
  {
   int q;
   Pop(&Sq,&q);  
   if(q==1)
   {
    int i=1;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=1;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
  }
  break;
     case IDC_BUT2:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=2;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=2;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
  }
  break;
  case IDC_BUT3:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=3;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=3;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
  }
  break;
  case IDC_BUT4:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=4;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=4;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT5:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=5;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=5;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT6:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=6;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=6;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT7:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=7;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=7;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT8:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=8;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=8;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT9:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=9;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=9;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
   
  }
  break;
  case IDC_BUT0:
  {
   int q;
   Pop(&Sq,&q);
   if(1==q)
   {
    int i=0;
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    SetDlgItemTextA(hwnd,IDC_NAME,data2);
    q=9;
    Push(&Sq,q);
   }
   else
   {
    TCHAR data1[256];
    GetDlgItemText(hwnd,IDC_NAME,data1,sizeof(data1));
    int i=0;   
    TCHAR data2[256];
    wsprintf(data2,"%i",i);
    TCHAR data[256];
    sprintf(data,"%s%s",data1,data2);
    SetDlgItemTextA(hwnd,IDC_NAME,data);
   }
  }
  break;
  case IDC_BUTa:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int i1=atoi(str1);
   Push(&Data1,i1);
   int q=1;
   Push(&Sq,q);
   int suan=1;
   Push(&Ss,suan);
  }
  break;
  case IDC_BUTb:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int i1=atoi(str1);
   Push(&Data1,i1);
   int q=1;
   Push(&Sq,q);
   int suan=2;
   Push(&Ss,suan);
   
  }
  break;
  case IDC_BUTc:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int i1=atoi(str1);
   Push(&Data1,i1);
   int q=1;
   Push(&Sq,q);
   int suan=3;
   Push(&Ss,suan);
   
  }
  break;
  case IDC_BUTd:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int i1=atoi(str1);
   Push(&Data1,i1);
   int q=1;
   Push(&Sq,q);
   int suan=4;
   Push(&Ss,suan);
   
  }
  break;
 /* case IDC_BUTe:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int q=1;
   Push(&Sq,q);
   int suan=1;
   Push(&Ss,suan);
   
  }
  break;
  case IDC_BUTf:
  {
   GetDlgItemText(hwnd,IDC_NAME,str1,sizeof(str1));
   int q=1;
   Push(&Sq,q);
   int suan=1;
   Push(&Ss,suan);
   
  }
  break;*/
        case IDC_OK:
  {
   int suan;
   Pop(&Ss,&suan);
   switch(suan)
   {
   case 1:
    {
     GetDlgItemText(hwnd,IDC_NAME,str2,sizeof(str2));
     int i1;
     Pop(&Data1,&i1);
     int i2=atoi(str2);
     int i3=i1+i2;
     sprintf(str3,"%i",i3);
     SetDlgItemTextA(hwnd,IDC_NAME,str3);


    }
    break;
   case 2:
    {
     GetDlgItemText(hwnd,IDC_NAME,str2,sizeof(str2));
     int i1;
     Pop(&Data1,&i1);
     int i2=atoi(str2);
     int i3=i1-i2;
     sprintf(str3,"%i",i3);
     SetDlgItemTextA(hwnd,IDC_NAME,str3);

    }
    break;
   case 3:
    {
     GetDlgItemText(hwnd,IDC_NAME,str2,sizeof(str2));
     int i1;
     Pop(&Data1,&i1);
     int i2=atoi(str2);
     int i3=i1*i2;
     sprintf(str3,"%i",i3);
     SetDlgItemTextA(hwnd,IDC_NAME,str3);

    }
    break;
   case 4:
    {
     GetDlgItemText(hwnd,IDC_NAME,str2,sizeof(str2));
     int i1;
     Pop(&Data1,&i1);
     int i2=atoi(str2);
     int i3=i1/i2;
     sprintf(str3,"%i",i3);
     SetDlgItemTextA(hwnd,IDC_NAME,str3);

    }
    break;
   default:break;
   }
  }
  break;
  case IDC_CE:
  {
   // hwnd 是阻止后面的窗口的运行;当前窗口的句柄,操作一个东西要现抓住它的把柄,这就是句柄;
  }
        break; 
        default:
  break;
    }
}

void Main_OnClose(HWND hwnd)
{
    EndDialog(hwnd, 0);
}

///

下面是stack1.h的程序:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 100
 
typedef struct Stack1
{
 int data[SIZE];
 int top;
}SqStack1;

void InitStack(SqStack1 *S)
{
 S->top=50;
}

void Push(SqStack1 *S,int e)
{
 if(S->top>=SIZE)
 {
  printf("栈满!!!");
  exit(0);
 }
 else
 {
  S->data[S->top]=e;
  S->top++;
 }
}

void Pop(SqStack1 *S,int *e)
{
 if(0==S->top)
 {
  printf("栈空!!!");
  exit(0);
 }
 else
 {
  S->top--;
  *e=S->data[S->top];
  //S->data[S->top]=1;
 }
}

int Empty(SqStack1 *S)
{
 if(0==S->top)
 {
  return 0;
 }
 else
 {
  return 1;
 }
}

没有时间加注释,初学者可能看起来有些困难,在这里表示抱歉!!!希望理解!!!

--------------------------------------------------------------------------------------------------------------------------------------------来自:科普知识。

可运行的.exe文件我会传我的资源里面,希望大家下载!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值