栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

教你如何用MFC编写计算器(WIN32版本)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

教你如何用MFC编写计算器(WIN32版本)

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'';
		//设置初始化显示文本
		SetDlgItemText(hWnd, IDC_STATIC_RESULT, L"0");
	}
	else
	{
		szResultText[wcslen(szResultText) - 1] = L'';
		//设置初始化显示文本
		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'';

			if (szResultText[i - 1] == L'.')
			{
				szResultText[i-1] = L'';
				break;
			}
		}
		else
		{
			break;
		}
	}

	return szResultText;
}

 3.完整代码获取,C/C++学习交流:https://jq.qq.com/?_wv=1027&k=Xm4p7P15https://jq.qq.com/?_wv=1027&k=Xm4p7P15

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/456844.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号