IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 教你如何用MFC编写计算器(WIN32版本) -> 正文阅读

[C++知识库]教你如何用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'\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=Xm4p7P15icon-default.png?t=LA46https://jq.qq.com/?_wv=1027&k=Xm4p7P15

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:17:43  更:2021-11-09 19:20:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:33:25-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码