1.效果图
2.主要代码
#include "Calc.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPSTR lpCmdLine, int nCmdShow)
{
g_hInstance = hInstance;
//弹出一个对话框
DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN_DLG), NULL, MainProc);
return 0;
}
//对话框处理函数
BOOL CALLBACK MainProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG://对话框初始化消息
OnInitDialog(hWnd);
break;
case WM_COMMAND://命令消息
{
switch (LOWORD(wParam))
{
case IDC_BTN_CLEAR://清零
OnBtnClear(hWnd);
break;
case IDC_BTN_BACK://退格
OnBack(hWnd);
break;
case IDC_BTN_0://0
OnBtn0(hWnd);
break;
case IDC_BTN_1://1
OnBtn1(hWnd);
break;
case IDC_BTN_2://2
OnBtn2(hWnd);
break;
case IDC_BTN_3://3
OnBtn3(hWnd);
break;
case IDC_BTN_4://4
OnBtn4(hWnd);
break;
case IDC_BTN_5://5
OnBtn5(hWnd);
break;
case IDC_BTN_6://6
OnBtn6(hWnd);
break;
case IDC_BTN_7://7
OnBtn7(hWnd);
break;
case IDC_BTN_8://8
OnBtn8(hWnd);
break;
case IDC_BTN_9://9
OnBtn9(hWnd);
break;
case IDC_BTN_DOT://9
OnBtnDot(hWnd);
break;
case IDC_BTN_ADD://加
OnBtnAdd(hWnd);
break;
case IDC_BTN_SUB://减去
OnBtnSub(hWnd);
break;
case IDC_BTN_MUL://乘法
OnBtnMul(hWnd);
break;
case IDC_BTN_CHU://除法
OnBtnChu(hWnd);
break;
case IDC_BTN_EQUAL://等于
OnBtnEqual(hWnd);
break;
}
break;
}
case WM_CLOSE:
EndDialog(hWnd,IDCANCEL);
return TRUE;
}
return FALSE;
}
//对话框初始化处理函数
void OnInitDialog(HWND hWnd)
{
//加载一下图标
HICON hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON1));
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM)hIcon);
//设置初始化显示文本
SetDlgItemText(hWnd,IDC_STATIC_RESULT, L"0");
//字体修改一下
HFONT hFont = CreateFont(
40, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
L"Arial");
//设置字体
HWND hResultStatic = GetDlgItem(hWnd,IDC_STATIC_RESULT);
SendMessage(hResultStatic, WM_SETFONT, (WPARAM)hFont, NULL);
}
//清零处理函数
void OnBtnClear(HWND hWnd)
{
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, L"0");
SetDlgItemText(hWnd, IDC_STATIC_SHOW, L"0");
//后面还要处理
memset(szShowText, 0, sizeof(szShowText));
memset(szResultText, 0, sizeof(szResultText));
num1 = 0;
num2 = 0;
result = 0;
symbol = 0;
}
//处理退格
void OnBack(HWND hWnd)
{
//判断字符串是否为空
if (wcslen(szResultText) == 0)
{
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, L"0");
}
else if (wcslen(szResultText) == 1)
{
szResultText[wcslen(szResultText) - 1] = L'\0';
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, L"0");
}
else
{
szResultText[wcslen(szResultText) - 1] = L'\0';
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
}
//点处理函数
void OnBtnDot(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L".");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//0处理函数
void OnBtn0(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"0");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//1处理函数
void OnBtn1(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"1");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//2处理函数
void OnBtn2(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"2");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//3处理函数
void OnBtn3(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"3");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//4处理函数
void OnBtn4(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"4");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//5处理函数
void OnBtn5(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"5");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//6处理函数
void OnBtn6(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"6");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//7处理函数
void OnBtn7(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"7");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//8处理函数
void OnBtn8(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"8");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//9处理函数
void OnBtn9(HWND hWnd)
{
//字符串连接
wcscat(szResultText, L"9");
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szResultText);
}
//加法处理函数
void OnBtnAdd(HWND hWnd)
{
//获取第一个数
if (wcslen(szResultText) != 0)
num2 = _wtof(szResultText);
else
num2 = _wtof(szTemp);
switch (symbol)
{
case '+':
result = result + num2;
break;
case '-':
result = result - num2;
break;
case '*':
result = result * num2;
break;
case '/':
result = result / num2;
break;
default:
result = num2;
break;
}
symbol = '+';
//字符串连接
//字符串连接
if (wcslen(szResultText) != 0)
{
wcscat(szShowText, szResultText);
wcscat(szShowText, L"+");
}
else
{
wcscat(szShowText, szTemp);
wcscat(szShowText, L"+");
}
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_SHOW, szShowText);
//清空result
memset(szResultText, 0, sizeof(szResultText));
TCHAR szText[100];
swprintf(szText, L"%f", result);
RemoveDecimal(szText);
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szText);
}
//减法处理函数
void OnBtnSub(HWND hWnd)
{
//获取第一个数
if (wcslen(szResultText) != 0)
num2 = _wtof(szResultText);
else
num2 = _wtof(szTemp);
switch (symbol)
{
case '+':
result = result + num2;
break;
case '-':
result = result - num2;
break;
case '*':
result = result * num2;
break;
case '/':
result = result / num2;
break;
default:
result = num2;
break;
}
symbol = '-';
//字符串连接
//字符串连接
if (wcslen(szResultText) != 0)
{
wcscat(szShowText, szResultText);
wcscat(szShowText, L"-");
}
else
{
wcscat(szShowText, szTemp);
wcscat(szShowText, L"-");
}
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_SHOW, szShowText);
//清空result
memset(szResultText, 0, sizeof(szResultText));
TCHAR szText[100];
swprintf(szText, L"%f", result);
RemoveDecimal(szText);
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szText);
}
//乘法处理函数
void OnBtnMul(HWND hWnd)
{
//获取第一个数
if (wcslen(szResultText) != 0)
num2 = _wtof(szResultText);
else
num2 = _wtof(szTemp);
switch (symbol)
{
case '+':
result = result + num2;
break;
case '-':
result = result - num2;
break;
case '*':
result = result * num2;
break;
case '/':
result = result / num2;
break;
default:
result = num2;
break;
}
symbol = '*';
//字符串连接
if (wcslen(szResultText) != 0)
{
wcscat(szShowText, szResultText);
wcscat(szShowText, L"*");
}
else
{
wcscat(szShowText, szTemp);
wcscat(szShowText, L"*");
}
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_SHOW, szShowText);
//清空result
memset(szResultText, 0, sizeof(szResultText));
TCHAR szText[100];
swprintf(szText, L"%f", result);
RemoveDecimal(szText);
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szText);
}
//除法处理函数
void OnBtnChu(HWND hWnd)
{
//获取第一个数
if (wcslen(szResultText)!=0)
num2 = _wtof(szResultText);
else
num2 = _wtof(szTemp);
switch (symbol)
{
case '+':
result = result + num2;
break;
case '-':
result = result - num2;
break;
case '*':
result = result * num2;
break;
case '/':
result = result / num2;
break;
default:
result = num2;
break;
}
symbol = '/';
//字符串连接
if (wcslen(szResultText) != 0)
{
wcscat(szShowText, szResultText);
wcscat(szShowText, L"/");
}
else
{
wcscat(szShowText, szTemp);
wcscat(szShowText, L"/");
}
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_SHOW, szShowText);
//清空result
memset(szResultText, 0, sizeof(szResultText));
TCHAR szText[100];
swprintf(szText, L"%f", result);
RemoveDecimal(szText);
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szText);
}
//等于处理函数
void OnBtnEqual(HWND hWnd)
{
//清除上面的文本
memset(szShowText, 0, sizeof(szShowText));
//清除原来结果
SetDlgItemText(hWnd, IDC_STATIC_SHOW, szShowText);
//获取第一个数
num2 = _wtof(szResultText);
switch (symbol)
{
case '+':
result = result + num2;
break;
case '-':
result = result - num2;
break;
case '*':
result = result * num2;
break;
case '/':
result = result / num2;
break;
}
TCHAR szText[100];
swprintf(szText, L"%f", result);
RemoveDecimal(szText);
//设置初始化显示文本
SetDlgItemText(hWnd, IDC_STATIC_RESULT, szText);
//赋值给结果文本
wcscpy(szResultText, szText);
//清除结果文本
wcscpy(szTemp, szResultText);
memset(szResultText, 0, sizeof(szResultText));
//result = 0;
//清除符号
symbol = 0;
}
//去除多余的小数位
wchar_t* RemoveDecimal(wchar_t* szResultText)
{
//"123.0000000"
for (int i = wcslen(szResultText) - 1; i >= 0; i--)
{
if (szResultText[i] == L'0')
{
szResultText[i] = L'\0';
if (szResultText[i - 1] == L'.')
{
szResultText[i-1] = L'\0';
break;
}
}
else
{
break;
}
}
return szResultText;
}
?3.完整代码获取,C/C++学习交流:https://jq.qq.com/?_wv=1027&k=Xm4p7P15https://jq.qq.com/?_wv=1027&k=Xm4p7P15
|