//一个简单计算器
#include <WINDOWS.H>
#include "resource.h"
int g_numA = 0;
int g_numB = 0;
int g_opFlag = 0; //运算过的标志
char g_operator = '\0';
INT_PTR CALLBACK DialogProc(
HWND hwndDlg, // handle to dialog box
UINT uMsg, // message
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
char num[16];
char edit[64];
char org_num[64];
char op_temp[8];
int result = 0; //运算结果
switch(uMsg)
{
case WM_COMMAND:
if (wParam >= 1002 && wParam <= 1011) //获取数字
{
if (g_opFlag != 0) //如果已经运算过则清空编辑器
{
SetDlgItemText(hwndDlg, IDC_EDIT_A, "");
g_opFlag = 0;
}
GetDlgItemText(hwndDlg, wParam, num, sizeof(num));
GetDlgItemText(hwndDlg, IDC_EDIT_A, edit, sizeof(edit));
sprintf(edit,"%s%s",edit,num);
SetDlgItemText(hwndDlg, IDC_EDIT_A, edit);
}
if (wParam >= 1012 && wParam <= 1015) //获取运算符
{
//保存第一个输入的数字
GetDlgItemText(hwndDlg, IDC_EDIT_A, org_num, sizeof(org_num));
g_numA = atoi(org_num);
//获取运算符,并保存运算符
GetDlgItemText(hwndDlg, wParam, op_temp, sizeof(op_temp));
g_operator = op_temp[0];
//清空编辑器
SetDlgItemText(hwndDlg, IDC_EDIT_A, "");
}
switch(wParam)
{
case IDOK:
//获取第2个输入的数字
GetDlgItemText(hwndDlg, IDC_EDIT_A, org_num, sizeof(org_num));
g_numB = atoi(org_num);
switch(g_operator) //运算
{
case '+':
result = g_numA + g_numB;
break;
case '-':
result = g_numA - g_numB;
break;
case '*':
result = g_numA * g_numB;
break;
case '/':
result = g_numA / g_numB;
break;
default:
break;
}
//显示运算结果
sprintf(edit, "%d", result);
SetDlgItemText(hwndDlg, IDC_EDIT_A, edit);
//置运算标志为true
g_opFlag = 1;
break;
case IDCANCEL:
MessageBox(hwndDlg,TEXT("取消按钮已按下"),TEXT("标题"),MB_OK);
break;
default:
break;
}
break;
case WM_CLOSE:
DestroyWindow(hwndDlg);
break;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd )
{
DialogBox(hInstance,
MAKEINTRESOURCE(IDD_MAIN),
NULL,
DialogProc);
return 0;
}