简易绿色计算器

作者因Win10升级后原计算器程序无法使用且不愿依赖应用商店,故使用VC++(VisualStudio2017)自制了一个简易绿色计算器,适用于U盘等便携设备,无需安装直接运行。

  电脑上的【计算器】程序升级到Win10后不能用了,好像是使用了应用商店技术。又不想安装应用商店,再者使用了应用商店技术,就不好做成绿色的(复制到U盘上就可以运行)。于是就用VC++(Visual Studio 2017)做了一个。

  VC不熟,难免有不足之处。

软件下载地址:http://yongcun.cc/shop/jsq/jsq.exe

源码下载地址:http://yongcun.cc/shop/jsq/jsq.zip

#include <windows.h>
#include <stdlib.h>
#include <tchar.h>
#include <string>
using namespace std;

static TCHAR szWindowClass[] = _T("DesktopApp");
static TCHAR szTitle[] = _T("简易绿色计算器");
HINSTANCE hInst;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void putForm(HWND hWnd);

int CALLBACK WinMain(
	_In_ HINSTANCE hInstance,
	_In_opt_ HINSTANCE hPrevInstance,
	_In_ LPSTR     lpCmdLine,
	_In_ int       nCmdShow
)
{
	WNDCLASSEX wcex;
	wcex.cbSize = sizeof(WNDCLASSEX);
	wcex.style = 0;// CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = WndProc;
	wcex.cbClsExtra = 0;
	wcex.cbWndExtra = 0;
	wcex.hInstance = hInstance;
	wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(101));//IDI_APPLICATION
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
	wcex.lpszMenuName = NULL;
	wcex.lpszClassName = szWindowClass;
	wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(101));//IDI_APPLICATION

	if (!RegisterClassEx(&wcex)){
		MessageBox(NULL,
			_T("Call to RegisterClassEx failed!"),
			_T("Windows Desktop Guided Tour"),
			NULL);
		return 1;
	}

	hInst = hInstance;
	HWND hWnd = CreateWindow(
		szWindowClass,
		szTitle,
		WS_CAPTION | WS_SYSMENU,//WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT, CW_USEDEFAULT,
		200, 290,
		NULL,
		NULL,
		hInstance,
		NULL
	);

	if (!hWnd){
		MessageBox(NULL,
			_T("Call to CreateWindow failed!"),
			_T("Windows Desktop Guided Tour"),
			NULL);
		return 1;
	}

	putForm(hWnd);
	ShowWindow(hWnd, nCmdShow);
	UpdateWindow(hWnd);

	MSG msg;
	while (GetMessage(&msg, NULL, 0, 0)){
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return (int)msg.wParam;
}

double calc(double a, char o, double b) {
	if (o == 11) {//+
		return a + b;
	}
	else if (o == 12) {//-
		return a - b;
	}
	else if (o == 13) {//*
		return a * b;
	}
	else if (o == 14) {// /
		return a / b;
	}
	else return 0;
}

double v0 = 0, v1 = 0;
string v2 = "0";
char op0 = 11;
bool number = false;
bool dot = false;
HWND textBox;
void formatV2() {
	if(v2.length() > 1 && v2.substr(0, 1).compare("0") == 0)v2 = v2.substr(1, v2.length() - 1);//去除前导0
	if(!dot)if (v2.length() >= 1 && v2.substr(v2.length() - 1, 1).compare(".")==0)v2 = v2.substr(0, v2.length() - 1);//去除尾部.
}
void show(double v) {
	char s[40];
	string v2;
	_gcvt_s(s, 40, v, 20);
	v2 = string(s);
	if (v2.length() >= 1 && v2.substr(v2.length() - 1, 1).compare(".")==0)v2 = v2.substr(0, v2.length() - 1);
	SetWindowTextA(textBox, (LPCSTR)&v2);
}

void show(string v) {
	if (v.length() > 1 && v.substr(0,1).compare("0")==0)v = v.substr(1, v.length() - 1); 
	SetWindowTextA(textBox, (LPCSTR)&v);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
	int n;
	switch (message){
	case WM_PAINT:
		break;
	case WM_DESTROY:
		PostQuitMessage(0);
		break;
	case WM_COMMAND:
		n = wParam - 1000;
		switch (n) {
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
		case 6:
		case 7:
		case 8:
		case 9:
			if (number) {
				formatV2();
				v2 = v2 + (char)(48 + n);
				v1 = atof(v2.c_str());
			}else{
				char buf[30];
				v1 = n;
				_gcvt_s(buf,20,v1,10);
				v2 = string(buf);
				formatV2();
				number = true;
				dot = false;
			}
			formatV2();
			show(v2);
			break;
		case 10://.
			if (!dot)v2 = v2 + ".";
			dot = true;
			show(v2);
			break;
		case 15://=
			if(number)v1 = atof(v2.c_str());
			v0 = calc(v0, op0, v1);
			show(v0);
			number = false;
			break;
		case 11:
		case 12:
		case 13:
		case 14://+-*/
			v1 = atof(v2.c_str());
			if (number)v0=calc(v0, op0, v1);
			op0 = n;
			v1 = 0;
			number = false;
			show(v0);
			break;
		case 16://AC
			v0 = 0;
			op0 = 11;//+
			v2 = "0";
			show(v2);
			number = true;
			dot = 0;
			break;
		}
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

HFONT hf;
int n = 0, H = 40, W=40;
void putControl(HWND hWnd, LPCWSTR t, int w,int id) {
	HWND hBtn;
	int i=0,row,col;
	row = n / 4+1;
	col = n % 4;
	hBtn = CreateWindow(_T("BUTTON"), t, WS_CHILD | WS_VISIBLE, col*W+10, row*H, w, H, hWnd, (HMENU)(1000 + id), NULL, hInst);
	SendMessage(hBtn, WM_SETFONT, (WPARAM)hf, TRUE);  //在创建完控件后面添加此句
	n++;
}
void putForm(HWND hWnd) {
	int w = W;
	hf = CreateFont(24,		//   nHeight   
		0,							//   nWidth   
		0,							//   nEscapement   
		0,							//   nOrientation   
		FW_BOLD,					//   nWeight   
		FALSE,						//   bItalic   
		FALSE,						//   bUnderline   
		0,							//   cStrikeOut   
		DEFAULT_CHARSET,			//   nCharSet   
		OUT_DEFAULT_PRECIS,			//   nOutPrecision   
		CLIP_DEFAULT_PRECIS,		//   nClipPrecision   
		DEFAULT_QUALITY,			//   nQuality   
		DEFAULT_PITCH | FF_SWISS,	//   nPitchAndFamily   
		TEXT("黑体"));
	textBox = CreateWindow(_T("EDIT"), _T("0"), WS_VISIBLE | WS_CHILD | WS_BORDER | ES_READONLY | ES_RIGHT, 8, 4, 164, 33, hWnd, (HMENU)17, NULL, NULL);//创建文本框
	SendMessage(textBox, WM_SETFONT, (WPARAM)hf, TRUE);
	putControl(hWnd, _T("7"), w,7);
	putControl(hWnd, _T("8"), w,8);
	putControl(hWnd, _T("9"), w,9);
	putControl(hWnd, _T("/"), w,14);
	putControl(hWnd, _T("4"), w,4);
	putControl(hWnd, _T("5"), w,5);
	putControl(hWnd, _T("6"), w,6);
	putControl(hWnd, _T("*"), w,13);
	putControl(hWnd, _T("1"), w,1);
	putControl(hWnd, _T("2"), w,2);
	putControl(hWnd, _T("3"), w,3);
	putControl(hWnd, _T("-"), w,12);
	putControl(hWnd, _T("0"), w,0);
	putControl(hWnd, _T("."), w,10);
	putControl(hWnd, _T("+"), w+w,11);
	n++;
	putControl(hWnd, _T("="), w + w,15);
	n++;
	putControl(hWnd, _T("AC"), w + w,16);
}

 

内容概要:本文详细介绍了一个基于Java和Vue的联邦学习隐私保护推荐系统的设计与实现。系统采用联邦学习架构,使用户数据在本地完成模型训练,仅上传加密后的模型参数或梯度,通过中心服务器进行联邦平均聚合,从而实现数据隐私保护与协同建模的双重目标。项目涵盖完整的系统架构设计,包括本地模型训练、中心参数聚合、安全通信、前后端解耦、推荐算法插件化等模块,并结合差分隐私与同态加密等技术强化安全性。同时,系统通过Vue前端实现用户行为采集与个性化推荐展示,Java后端支撑高并发服务与日志处理,形成“本地训练—参数上传—全局聚合—模型下发—个性化微调”的完整闭环。文中还提供了关键模块的代码示例,如特征提取、模型聚合、加密上传等,增强了项目的可实施性与工程参考价值。 适合人群:具备一定Java和Vue开发基础,熟悉Spring Boot、RESTful API、分布式系统或机器学习相关技术,从事推荐系统、隐私计算或全栈开发方向的研发人员。 使用场景及目标:①学习联邦学习在推荐系统中的工程落地方法;②掌握隐私保护机制(如加密传输、差分隐私)与模型聚合技术的集成;③构建高安全、可扩展的分布式推荐系统原型;④实现前后端协同的个性化推荐闭环系统。 阅读建议:建议结合代码示例深入理解联邦学习流程,重点关注本地训练与全局聚合的协同逻辑,同时可基于项目架构进行算法替换与功能扩展,适用于科研验证与工业级系统原型开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值