我双叕叕叕更新了~纯手工编写C++画图,有注释~

本次更新内容:

               人品,随机质量优化

提前申明:如果运行不了,请到主页查看RedpandaDevc++下载,若还是不行就卸了重装。

版本号:1.28.6

812行 25698字

最终结果预览

代码预览

 

 

//版本号 :v1.28.6
//最终归属权为作者(饼干帅成渣)所有
//禁止转载
//仅供学习,不得用于违法
#include <windows.h>
#include <gdiplus.h>
#include <bits/stdc++.h>
#include <pshpack2.h>

// 控件和消息定义
#define IDC_EDIT_INPUT  109
#define IDC_BTN_COPY    108
#define IDC_STATIC_TIME 1007
#define IDC_EDIT_PWD   1001
#define IDC_BTN_TOGGLE 1002
#define IDC_EDIT1        1003
#define IDC_BUTTON_SUBMIT 1004
#define IDC_BTN_TRAY    1005
#define WM_TRAY_ICON    1006
#define IDC_BTN_SPEAK 1008

using namespace std;
using namespace chrono;
// 扩展图形类型枚举(移除平行四边形,新增梯形)
enum ShapeType { SQUARE, CIRCLE, TRIANGLE, TRAPEZOID };
ShapeType g_currentShape = SQUARE;
POINT g_startPos, g_endPos;
bool g_isDrawing = false;
// 定义光标切换的状态
enum CursorState {
	ARROW,
	HAND,
	CROSS
};
CursorState currentCursor = CROSS;
HWND g_hwnd;
HWND hhwwnndd;
NOTIFYICONDATA g_nid = {0};
bool g_isInTray = false;
HWND hEdit;
HWND hButton, hButton2;
RECT g_originalRect;
LONG_PTR g_originalStyle;
bool g_isFullscreen = false;
HBITMAP g_hMemBitmap = NULL;
HDC g_hMemDC = NULL;
int g_width = 0, g_height = 0;
#define IDC_BTN_COLOR 1099
COLORREF g_colors[] = { RGB(255, 0, 0), RGB(0, 0, 0), RGB(0, 0, 255) }; // 红黑蓝
int g_currentColor = 1; // 默认黑色
bool g_isPasswordMode = true; // 初始为密码模式
//位图文件头文件定义
//其中不包括文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确的读取文件信息)
typedef struct {
	WORD    bfType;//文件类型,必须是0x424D,即字符“BM”
	DWORD   bfSize;//文件大小
	WORD    bfReserved1;//保留字
	WORD    bfReserved2;//保留字
	DWORD   bfOffBits;//从文件头到实际位图数据的偏移字节数
} BMPFILEHEADER_T;

struct BMPFILEHEADER_S {
	WORD    bfType;
	DWORD   bfSize;
	WORD    bfReserved1;
	WORD    bfReserved2;
	DWORD   bfOffBits;
};
typedef struct {
	DWORD      biSize;//信息头大小
	LONG       biWidth;//图像宽度
	LONG       biHeight;//图像高度
	WORD       biPlanes;//位平面数,必须为1
	WORD       biBitCount;//每像素位数
	DWORD      biCompression;//压缩类型
	DWORD      biSizeImage;//压缩图像大小字节数
	LONG       biXPelsPerMeter;//水平分辨率
	LONG       biYPelsPerMeter;//垂直分辨率
	DWORD      biClrUsed;//位图实际用到的色彩数
	DWORD      biClrImportant;//本位图中重要的色彩数
} BMPINFOHEADER_T;//位图信息头定义

typedef void(__stdcall* NTPROC)(DWORD*, DWORD*, DWORD*);

int getNtVersion() {
	HINSTANCE hinst = LoadLibrary("ntdll.dll");
	DWORD major, minor, build;
	NTPROC proc = reinterpret_cast<NTPROC>(GetProcAddress(hinst, "RtlGetNtVersionNumbers"));
	proc(&major, &minor, &build);
	return major;
}

void ScreenShot() {
	if (GetAsyncKeyState('0')) {
		// 生成时间戳 (格式: 年月日_时分秒)
		auto now = system_clock::now();
		auto in_time_t = system_clock::to_time_t(now);
		stringstream timestamp;
		timestamp << put_time(localtime(&in_time_t), "%Y%m%d_%H%M%S");

		// 构建PowerShell命令
		string command =
		    "powershell -Command \""
		    "$timestamp = '" + timestamp.str() + "'; "
		    "Add-Type -AssemblyName System.Windows.Forms; "
		    "Add-Type -AssemblyName System.Drawing; "
		    "$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds; "
		    "$bitmap = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height); "
		    "$graphic = [System.Drawing.Graphics]::FromImage($bitmap); "
		    "$graphic.CopyFromScreen([System.Drawing.Point]::Empty, [System.Drawing.Point]::Empty, $screen.Size); "
		    "$bitmap.Save(\\\"C:\\screenshot_$timestamp.png\\\", [System.Drawing.Imaging.ImageFormat]::Png)\"";

		// 执行命令
		system(command.c_str());
		MessageBox(NULL, "截图成功", "提示", MB_OK);
	}
}

void generateBmp( BYTE * pData, int width, int height, const  char * filename ) { //生成Bmp图片,传递RGB值,传递图片像素大小,传递图片存储路径
	int size = width * height * 3; // 每个像素点3个字节
	// 位图第一部分,文件信息
	BMPFILEHEADER_T bfh;
	bfh.bfType = 0X4d42;  //bm
	bfh.bfSize = size  // data size
	             + sizeof( BMPFILEHEADER_T ) // first section size
	             + sizeof( BMPINFOHEADER_T ) // second section size
	             ;
	bfh.bfReserved1 = 0; // reserved
	bfh.bfReserved2 = 0; // reserved
	bfh.bfOffBits = bfh.bfSize - size;

	// 位图第二部分,数据信息
	BMPINFOHEADER_T bih;
	bih.biSize = sizeof(BMPINFOHEADER_T);
	bih.biWidth = width;
	bih.biHeight = height;
	bih.biPlanes = 1;
	bih.biBitCount = 24;
	bih.biCompression = 0;
	bih.biSizeImage = size;
	bih.biXPelsPerMeter = 0;
	bih.biYPelsPerMeter = 0;
	bih.biClrUsed = 0;
	bih.biClrImportant = 0;
	FILE * fp = fopen( filename, "wb" );
	if ( !fp ) return;
	fwrite( &bfh, 1, sizeof(BMPFILEHEADER_T), fp );
	fwrite( &bih, 1, sizeof(BMPINFOHEADER_T), fp );
	fwrite( pData, 1, size, fp );
	fclose( fp );
}

void drawBMP() {
	int i = 0, j = 0;
	struct {
		BYTE b;
		BYTE g;
		BYTE r;
	} pRGB[240][320];  // 定义位图数据
	memset( pRGB, 0, sizeof(pRGB) ); // 设置背景为黑色
	// 在中间画一个100*100的矩形
	for (  i = 70; i < 170; i++ ) {
		for ( j = 110; j < 210; j++ ) {
			pRGB[i][j].r = 0x3f;
			pRGB[i][j].g = 0x3f;
			pRGB[i][j].b = 0x3f;
		}
	}
	// 生成BMP图片
	generateBmp( ( BYTE*)pRGB, 320, 240, "C:\\rgb.bmp" );
}

// 梯形顶点计算
void CalculateTrapezoidPoints(POINT start, POINT end, POINT points[4]) {
	int height = abs(end.y - start.y);         // 垂直高度
	int topWidth = abs(end.x - start.x);       // 上底宽度
	int bottomWidth = topWidth + height * 2;  // 下底宽度

	points[0] = start;                        // 左上顶点
	points[1] = { start.x + topWidth, start.y }; // 右上顶点
	points[2] = { end.x + bottomWidth, end.y }; // 右下顶点
	points[3] = { end.x - bottomWidth, end.y }; // 左下顶点
}

// 三角形顶点计算函数
void CalculateTrianglePoints(POINT start, POINT end, POINT points[3]) {
	// 计算底边中点
	POINT baseMid = {
		(start.x + end.x) / 2,
		(start.y + end.y) / 2
	};

	// 计算高度方向
	int height = static_cast<int>(sqrt(
	                                  pow(end.x - start.x, 2) +
	                                  pow(end.y - start.y, 2)
	                              )) / 2;

	// 设置三个顶点(等腰三角形)
	points[0] = start;                     // 左顶点
	points[1] = end;                       // 右顶点
	points[2] = { baseMid.x, baseMid.y - height }; // 顶点
}

void InitTrayIcon(HWND hwnd) {
	g_nid.cbSize = sizeof(NOTIFYICONDATA);
	g_nid.hWnd = hwnd;
	g_nid.uID = 1;
	g_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
	g_nid.uCallbackMessage = WM_TRAY_ICON;
	g_nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
}

// 切换托盘状态
void ToggleTrayMode(HWND hwnd) {
	if (!g_isInTray) {
		// 最小化到托盘
		ShowWindow(hwnd, SW_HIDE);
		Shell_NotifyIcon(NIM_ADD, &g_nid);
	} else {
		// 恢复窗口
		ShowWindow(hwnd, SW_SHOW);
		Shell_NotifyIcon(NIM_DELETE, &g_nid);
	}
	g_isInTray = !g_isInTray;
}

// 初始化双缓冲
void InitDoubleBuffer(HWND hwnd) {
	RECT rc;
	GetClientRect(hwnd, &rc);
	g_width = rc.right - rc.left;
	g_height = rc.bottom - rc.top;
	HDC hdc = GetDC(hwnd);
	g_hMemDC = CreateCompatibleDC(hdc);
	g_hMemBitmap = CreateCompatibleBitmap(hdc, g_width, g_height);
	SelectObject(g_hMemDC, g_hMemBitmap);
	ReleaseDC(hwnd, hdc);
	// 初始清屏(可选)
	FillRect(g_hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
	HBRUSH hWhiteBrush = CreateSolidBrush(RGB(255, 255, 255));
	FillRect(g_hMemDC, &rc, hWhiteBrush);
	DeleteObject(hWhiteBrush);
}

// 切换全屏函数
void ToggleFullscreen(HWND hwnd) {
	if (!g_isFullscreen) {
		// 进入全屏
		GetWindowRect(hwnd, &g_originalRect);
		g_originalStyle = GetWindowLongPtr(hwnd, GWL_STYLE);
		int screenWidth = GetSystemMetrics(SM_CXSCREEN);
		int screenHeight = GetSystemMetrics(SM_CYSCREEN);

		SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP);
		SetWindowPos(hwnd, HWND_TOP,
		             0, 0, screenWidth, screenHeight,
		             SWP_FRAMECHANGED | SWP_SHOWWINDOW
		            );
	} else {
		// 退出全屏
		SetWindowLongPtr(hwnd, GWL_STYLE, g_originalStyle);
		SetWindowPos(hwnd, NULL,
		             g_originalRect.left,
		             g_originalRect.top,
		             g_originalRect.right - g_originalRect.left,
		             g_originalRect.bottom - g_originalRect.top,
		             SWP_FRAMECHANGED | SWP_NOZORDER
		            );
	}
	g_isFullscreen = !g_isFullscreen;
}

// 切换密码显示模式
void TogglePasswordMode(HWND hwnd) {
	// 保存当前文本
	wchar_t szText[256] = {0};
	GetWindowTextW(hEdit, szText, 256);

	// 获取当前窗口位置
	RECT rc;
	GetWindowRect(hEdit, &rc);
	MapWindowPoints(HWND_DESKTOP, GetParent(hEdit), (LPPOINT)&rc, 2);

	// 销毁旧编辑框
	DestroyWindow(hEdit);

	// 创建新编辑框(切换样式)
	DWORD style = WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL;
	if (g_isPasswordMode) {
		style |= ES_PASSWORD;
	}

	hEdit = CreateWindowW(
	            L"EDIT", szText,
	            style,
	            rc.left, rc.top,
	            rc.right - rc.left,
	            rc.bottom - rc.top,
	            hwnd, (HMENU)IDC_EDIT_PWD,
	            NULL,
	            NULL
	        );

	// 更新模式状态
	g_isPasswordMode = !g_isPasswordMode;

	// 更新按钮文本
	SetWindowTextW(GetDlgItem(hwnd, IDC_BTN_TOGGLE),
	               g_isPasswordMode ? L"隐藏密码" : L"显示明文");
}

void ShowTodayLuck() {
    // 初始化随机种子(使用当前时间)
    mt19937 mt(time(0));
    // 生成0-100的随机数
    int luck_value = mt() % 100+1;

    // 构建输出字符串
    string message;
    if (luck_value == 100) {
        message = "人品100 人品爆棚";
    } else if (luck_value > 80) {  // 81-99
        message = "人品" + to_string(luck_value) + " 人品还不错";
    } else if (luck_value > 20) {  // 21-80
        message = "人品" + to_string(luck_value) + " 人品还凑合";
    } else {  // 0-20
        message = "人品:" + to_string(luck_value) + " 人品太差了,请去拜佛";
    }
    // 弹窗显示结果
    MessageBoxA(nullptr, message.c_str(), "运势", MB_OK);
}

// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
	switch (msg) {
		case WM_SETCURSOR:
			if (LOWORD(lParam) == HTCLIENT) {
				HCURSOR hCursor = NULL;
				switch (currentCursor) {
					case ARROW:
						hCursor = LoadCursor(NULL, IDC_CROSS);
						break;
					case HAND:
						hCursor = LoadCursor(NULL, IDC_ARROW);
						break;
					case CROSS:
						hCursor = LoadCursor(NULL, IDC_HAND );
						break;
				}
				SetCursor(hCursor);
				return TRUE;
			}
			return TRUE;
			break;
		case WM_SIZE:
			// 窗口大小变化时重置缓冲
			if (g_hMemDC) {
				DeleteDC(g_hMemDC);
				DeleteObject(g_hMemBitmap);
			}
			InitDoubleBuffer(hwnd);
			break;
		case WM_KEYDOWN:
			if (wParam == VK_BACK) { // 按Backspace切换全屏
				ToggleFullscreen(hwnd);
			} else if (wParam == VK_CONTROL) {
				DestroyWindow(hwnd);
				HWND hwnwd;
				hwnwd = FindWindow("ConsoleWindowClass", NULL);
				if (hwnwd) {
					ShowOwnedPopups(hwnwd, SW_SHOW);
					ShowWindow(hwnwd, SW_SHOW);
				}
			}
			return 0;
		case WM_PAINT: {
			PAINTSTRUCT ps;
			HDC hdc = BeginPaint(hwnd, &ps);
			HDC hMemDC = CreateCompatibleDC(hdc);
			HBITMAP hBmp = CreateCompatibleBitmap(hdc, ps.rcPaint.right, ps.rcPaint.bottom);
			SelectObject(hMemDC, hBmp);
			FillRect(hMemDC, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
			if (g_isDrawing) {
				HBRUSH hBrush = CreateSolidBrush(g_colors[g_currentColor]);
				SelectObject(hMemDC, hBrush);
				switch (g_currentShape) {
					case CIRCLE: {
						int radius = static_cast<int>(sqrt(
						                                  pow(g_endPos.x - g_startPos.x, 2) +
						                                  pow(g_endPos.y - g_startPos.y, 2)));
						Ellipse(hMemDC,
						        g_startPos.x - radius, g_startPos.y - radius,
						        g_startPos.x + radius, g_startPos.y + radius);
						break;
					}
					case SQUARE:
						Rectangle(hMemDC,
						          min(g_startPos.x, g_endPos.x),
						          min(g_startPos.y, g_endPos.y),
						          max(g_startPos.x, g_endPos.x),
						          max(g_startPos.y, g_endPos.y));
						break;
					case TRIANGLE: {
						POINT points[3];
						CalculateTrianglePoints(g_startPos, g_endPos, points);
						Polygon(hMemDC, points, 3);
						break;
					}
					case TRAPEZOID: {
						POINT points[4];
						CalculateTrapezoidPoints(g_startPos, g_endPos, points);
						Polygon(hMemDC, points, 4);
						break;
					}
				}
				DeleteObject(hBrush);
			}

			BitBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, hMemDC, 0, 0, SRCCOPY);
			DeleteDC(hMemDC);
			DeleteObject(hBmp);
			EndPaint(hwnd, &ps);
			break;
		}
		case WM_CLOSE:
			// 清理托盘图标
			if (g_isInTray) Shell_NotifyIcon(NIM_DELETE, &g_nid);
			DestroyWindow(hwnd);
			break;
		case WM_DESTROY:
			KillTimer(hwnd, 1); // 销毁定时器
			PostQuitMessage(0);
			return 0;
			break;
		// 处理鼠标消息
		case WM_LBUTTONDOWN:
			g_startPos.x = LOWORD(lParam);
			g_startPos.y = HIWORD(lParam);
			g_isDrawing = true;
			return 0;

		case WM_LBUTTONUP:
			g_isDrawing = false;
			break;
		case WM_MOUSEMOVE:
			if (g_isDrawing) {
				g_endPos.x = LOWORD(lParam);
				g_endPos.y = HIWORD(lParam);
				InvalidateRect(hwnd, NULL, TRUE);
			}
			return 0;
		case WM_ERASEBKGND:
			return 1; // 禁用背景擦除
		case WM_CREATE: {
			CreateWindowW(L"BUTTON", L"切换颜色(当前:黑)",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              400, 90, 150, 30, hwnd,
			              (HMENU)IDC_BTN_COLOR, NULL, NULL);
			CreateWindowW(L"BUTTON", L"截图",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              400, 135, 150, 30, hwnd,
			              (HMENU)1082, NULL, NULL);
			// 创建获取时间
			hhwwnndd = CreateWindowW(
			               L"BUTTON", L"获取系统时间",
			               WS_CHILD | WS_VISIBLE | SS_CENTER,
			               20, 350, 150, 30,
			               hwnd, (HMENU)12345,
			               NULL, NULL
			           );
			CreateWindowW(
			               L"BUTTON", L"人品",
			               WS_CHILD | WS_VISIBLE | SS_CENTER,
			               20, 400, 150, 30,
			               hwnd, (HMENU)129,
			               NULL, NULL
			           );		           
			// 创建按钮
			CreateWindowW(L"BUTTON", L"切换图形(当前:方形)",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              400, 10, 220, 30, hwnd, (HMENU)1011, NULL, NULL);
			CreateWindowW(
			    L"BUTTON", L"朗读",
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			    250, 300, 80, 30,
			    hwnd, (HMENU)IDC_BTN_SPEAK,
			    NULL, NULL
			);
			CreateWindowW(L"BUTTON", L"最小化到托盘",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              400, 50, 150, 30, hwnd,
			              (HMENU)IDC_BTN_TRAY, NULL, NULL);
			// 创建按钮
			CreateWindow("BUTTON", "切换光标", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
			             20, 450, 100, 30, hwnd, (HMENU)32, NULL, NULL);
			// 初始化托盘
			InitTrayIcon(hwnd);
			// 创建按钮
			hButton = CreateWindow(
			              "BUTTON",                     // 窗口类(按钮)
			              "点击我关闭",                     // 按钮文本
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			              50, 50,                       // 位置 (x, y)
			              100, 30,                       // 大小 (宽度, 高度)
			              hwnd,                         // 父窗口句柄
			              (HMENU)1,                     // 控件ID
			              ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			              NULL                          // 附加数据
			          );
			CreateWindow(
			    "BUTTON",                     // 窗口类(按钮)
			    "版本号",                     // 按钮文本
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			    10, 10,                       // 位置 (x, y)
			    100, 30,                       // 大小 (宽度, 高度)
			    hwnd,                         // 父窗口句柄
			    (HMENU)15423,                     // 控件ID
			    ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			    NULL                          // 附加数据
			);
			CreateWindow(
			    "BUTTON",                     // 窗口类(按钮)
			    "生成图片(C盘)",                     // 按钮文本
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			    180, 10,                       // 位置 (x, y)
			    120, 30,                       // 大小 (宽度, 高度)
			    hwnd,                         // 父窗口句柄
			    (HMENU)1023,                     // 控件ID
			    ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			    NULL                          // 附加数据
			);
			hButton2 = CreateWindow(
			               "BUTTON",                     // 窗口类(按钮)
			               "点击我切换全屏",                     // 按钮文本
			               WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			               850, 50,                       // 位置 (x, y)
			               100, 30,                       // 大小 (宽度, 高度)
			               hwnd,                         // 父窗口句柄
			               (HMENU)2,                     // 控件ID
			               ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			               NULL                          // 附加数据
			           );
			hButton2 = CreateWindow(
			               "BUTTON",                     // 窗口类(按钮)
			               "在桌面新建快捷方式",                     // 按钮文本
			               WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
			               750, 10,                       // 位置 (x, y)
			               200, 30,                       // 大小 (宽度, 高度)
			               hwnd,                         // 父窗口句柄
			               (HMENU)324,                     // 控件ID
			               ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
			               NULL                          // 附加数据
			           );
			// 创建切换按钮
			CreateWindowW(
			    L"BUTTON", L"隐藏密码",
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			    100, 300, 80, 30,
			    hwnd, (HMENU)IDC_BTN_TOGGLE,
			    NULL, NULL
			);
			hEdit = CreateWindowW(L"EDIT", L"",
			                      WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
			                      20, 250, 200, 25, hwnd,  (HMENU)IDC_EDIT1, NULL, NULL);

			CreateWindowW(L"BUTTON", L"示例输入",
			              WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			              20, 300, 80, 30, hwnd, (HMENU)IDC_BUTTON_SUBMIT, NULL, NULL);
			// 创建复制按钮
			CreateWindowW(
			    L"BUTTON", L"复制",
			    WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
			    180, 300, 80, 30,
			    hwnd, (HMENU)IDC_BTN_COPY,
			    NULL, NULL
			);
			return 0;
		}
		case WM_TRAY_ICON:
			if (lParam == WM_LBUTTONDBLCLK) {
				ToggleTrayMode(hwnd);
			}
			return 0;
		// 禁用系统最小化操作
		case WM_SYSCOMMAND:
			if (wParam == SC_MAXIMIZE || wParam == SC_CLOSE) {
				MessageBox(
				    hwnd,
				    "没有执行命令的权限",
				    "提示",
				    MB_OK | MB_ICONERROR
				);
				return 0;
			}
			break;
		case WM_COMMAND: {
			if (LOWORD(wParam) == IDC_BTN_SPEAK) {
				wchar_t buffer[256];
				GetWindowTextW(hEdit, buffer, 256); // 获取输入框内容
				if (wcslen(buffer) == 0) {
					MessageBoxW(hwnd, L"输入不能为空", L"错误", MB_ICONERROR);
				} else {
					// 转义双引号防止VBS语法错误
					wstring text = buffer;
					size_t pos = 0;
					while ((pos = text.find(L'"', pos)) != std::wstring::npos) {
						text.replace(pos, 1, L"\"\"");
						pos += 2;
					}
					// 写入临时VBS文件
					wofstream vbsFile("speak2.vbs");
					vbsFile.imbue(std::locale(std::locale::classic(), new std::codecvt_utf8<wchar_t>));
					if (vbsFile.is_open()) {
						vbsFile << L"Set speech = CreateObject(\"SAPI.SpVoice\")\n";
						vbsFile << L"speech.Speak \"";
						vbsFile << buffer;
						vbsFile << L"\"\n";
						vbsFile.close();

						// 执行脚本并删除临时文件
						system("wscript speak2.vbs");
//						_wremove(L"speak.vbs");
					} else {
						MessageBoxW(hwnd, L"临时文件创建失败", L"错误", MB_ICONERROR);
					}
				}
			}
			if (LOWORD(wParam) == 1011) {
				g_currentShape = static_cast<ShapeType>((g_currentShape + 1) % 4);
				// 更新按钮文本
				const wchar_t* texts[] = {
					L"切换图形(当前:长方形)",
					L"切换图形(当前:圆形)",
					L"切换图形(当前:三角形)",
					L"切换图形(当前:梯形)"
				};
				SetWindowTextW(GetDlgItem(hwnd, 1011), texts[g_currentShape]);
				InvalidateRect(hwnd, NULL, TRUE);
			}
			if (LOWORD(wParam) == IDC_BTN_COLOR) {
				g_currentColor = (g_currentColor + 1) % 3;
				const wchar_t* colorText[] = { L"红", L"黑", L"蓝" };
				wchar_t btnText[50];
				wsprintfW(btnText, L"切换颜色(当前:%s)", colorText[g_currentColor]);
				SetWindowTextW(GetDlgItem(hwnd, IDC_BTN_COLOR), btnText);
				InvalidateRect(hwnd, NULL, TRUE);
			}
			if (LOWORD(wParam) == IDC_BTN_COPY) {
				// 获取输入框内容
				wchar_t szText[256];
				GetWindowTextW(hEdit, szText, 256);

				// 打开剪贴板
				if (OpenClipboard(hwnd)) {
					// 清空剪贴板
					EmptyClipboard();

					// 分配全局内存
					HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, (wcslen(szText) + 1) * sizeof(wchar_t));
					if (hGlobal) {
						// 锁定内存并复制数据
						wchar_t* pGlobal = (wchar_t*)GlobalLock(hGlobal);
						wcscpy(pGlobal,  szText);
						GlobalUnlock(hGlobal);

						// 设置剪贴板数据
						SetClipboardData(CF_UNICODETEXT, hGlobal);
					}

					// 关闭剪贴板
					CloseClipboard();
				}

				// 提示用户
				MessageBoxW(hwnd, L"内容已复制到剪贴板!", L"成功", MB_OK);
			}
			// 假设按钮的ID是IDC_BUTTON1
			if (LOWORD(wParam) == 32) {
				if (currentCursor == CROSS) {
					currentCursor = HAND;
				} else if (currentCursor == HAND) {
					currentCursor = ARROW;
				} else {
					currentCursor = CROSS;
				}
				// 强制更新光标
				PostMessage(hwnd, WM_SETCURSOR, (WPARAM)hwnd, HTCLIENT);
			}
			if (wParam == 12345) { //ID为12345
				// 获取本地时间
				SYSTEMTIME st;
				GetLocalTime(&st);

				// 格式化时间字符串
				wchar_t timeStr[64];
				_snwprintf(timeStr, 64,
				           L"%04d-%02d-%02d %02d:%02d:%02d",
				           st.wYear, st.wMonth, st.wDay,
				           st.wHour, st.wMinute, st.wSecond);

//                // 更新静态文本
//                SetWindowTextW(hStaticTime, timeStr);

//                 可选:弹出消息框显示
				MessageBoxW(hwnd, timeStr, L"系统时间", MB_OK);
			}
			if (LOWORD(wParam) == IDC_BTN_TRAY) {
				ToggleTrayMode(hwnd);
			}
			if (LOWORD(wParam) == 324) {
				MessageBoxW(hwnd, L"请先在D盘创建Draw.cpp,若已经创建,请忽略!", L"提示", MB_OK);
				system("powershell -command \"$WshShell=New-Object -comObject WScript.Shell; $Shortcut=$WshShell.CreateShortcut(\'%UserProfile%\\Desktop\\Draw.lnk\'); $Shortcut.TargetPath=\'D:\\Draw.exe'; $Shortcut.Save()\"");
				MessageBoxW(hwnd, L"创建成功!", L"成功", MB_OK);
			}
			if (LOWORD(wParam) == IDC_BUTTON_SUBMIT) {
				wchar_t buffer[256];
				GetWindowTextW(hEdit, buffer, 256);

				if (wcslen(buffer) == 0) {
					MessageBoxW(hwnd, L"输入不能为空!", L"错误", MB_ICONERROR);
				} else {
					MessageBoxW(hwnd, buffer, L"输入内容", MB_OK);
				}
			}
			if (LOWORD(wParam) == IDC_BTN_TOGGLE) {
				TogglePasswordMode(hwnd);
			}
			if (LOWORD(wParam) == 15423) {
				MessageBoxW(hwnd, L"v1.28.6", L"版本号", MB_OK);
			}

			int ButtonID = LOWORD(wParam);
			switch (ButtonID) {
				case 1:
					DestroyWindow(hwnd);
					HWND hwnwd;
					hwnwd = FindWindow("ConsoleWindowClass", NULL);
					if (hwnwd) {
						ShowOwnedPopups(hwnwd, SW_SHOW);
						ShowWindow(hwnwd, SW_SHOW);
					}
					break;
				case 2:
					ToggleFullscreen(hwnd);
					break;
				case 1023:
					drawBMP();
					break;
				case 1082:
					ScreenShot();
					break;
				case 129: 
					ShowTodayLuck();
					break;
			}
		}
		default:
			return DefWindowProc(hwnd, msg, wParam, lParam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, [[maybe_unused]] LPSTR pCmdLine, [[maybe_unused]] int nCmdShow) {
	if (getNtVersion() <= 9) {
		cout << "需要Win10/11支持" << endl;
		exit(0);
	} else {
		cout << "您的电脑支持" << endl;
	}
	system("pause");
	HWND hwnwd;
	hwnwd = FindWindow("ConsoleWindowClass", NULL);
	if (hwnwd) {
		ShowOwnedPopups(hwnwd, SW_HIDE);
		ShowWindow(hwnwd, SW_HIDE);
	}
	const char* CLASS_NAME = "CustomWindowClass";

	WNDCLASS wc = {};
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hInstance;
	wc.lpszClassName = TEXT(CLASS_NAME);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

	if (!RegisterClass(&wc)) return 0;

	// 创建窗口
	HWND hwnd = CreateWindowEx(
	                0,                              // 扩展样式
	                TEXT(CLASS_NAME),                     // 窗口类
	                " 绘画   v1.28.6",                   // 窗口标题
	                WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 窗口样式
	                CW_USEDEFAULT, CW_USEDEFAULT,   // 位置
	                1000, 1000,                       // 大小
	                NULL,                           // 父窗口
	                NULL,                           // 菜单
	                hInstance,                      // 实例句柄
	                NULL                            // 附加数据
	            );

	if (!hwnd) return 0;

	// 消息循环
	MSG msg = {};
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
}
//水印

 

//版本号 :v1.28.6
//最终归属权为作者(饼干帅成渣)所有
//禁止转载
//仅供学习,不得用于违法
#include <windows.h>
#include <gdiplus.h>
#include <bits/stdc++.h>
#include <pshpack2.h>

// 控件和消息定义
#define IDC_EDIT_INPUT  109
#define IDC_BTN_COPY    108
#define IDC_STATIC_TIME 1007
#define IDC_EDIT_PWD   1001
#define IDC_BTN_TOGGLE 1002
#define IDC_EDIT1        1003
#define IDC_BUTTON_SUBMIT 1004
#define IDC_BTN_TRAY    1005
#define WM_TRAY_ICON    1006
#define IDC_BTN_SPEAK 1008

using namespace std;
using namespace chrono;
// 扩展图形类型枚举(移除平行四边形,新增梯形)
enum ShapeType { SQUARE, CIRCLE, TRIANGLE, TRAPEZOID };
ShapeType g_currentShape = SQUARE;
POINT g_startPos, g_endPos;
bool g_isDrawing = false;
// 定义光标切换的状态
enum CursorState {
    ARROW,
    HAND,
    CROSS
};
CursorState currentCursor = CROSS;
HWND g_hwnd;
HWND hhwwnndd;
NOTIFYICONDATA g_nid = {0};
bool g_isInTray = false;
HWND hEdit;
HWND hButton, hButton2;
RECT g_originalRect;
LONG_PTR g_originalStyle;
bool g_isFullscreen = false;
HBITMAP g_hMemBitmap = NULL;
HDC g_hMemDC = NULL;
int g_width = 0, g_height = 0;
#define IDC_BTN_COLOR 1099
COLORREF g_colors[] = { RGB(255, 0, 0), RGB(0, 0, 0), RGB(0, 0, 255) }; // 红黑蓝
int g_currentColor = 1; // 默认黑色
bool g_isPasswordMode = true; // 初始为密码模式
//位图文件头文件定义
//其中不包括文件类型信息(由于结构体的内存结构决定,要是加了的话将不能正确的读取文件信息)
typedef struct {
    WORD    bfType;//文件类型,必须是0x424D,即字符“BM”
    DWORD   bfSize;//文件大小
    WORD    bfReserved1;//保留字
    WORD    bfReserved2;//保留字
    DWORD   bfOffBits;//从文件头到实际位图数据的偏移字节数
} BMPFILEHEADER_T;

struct BMPFILEHEADER_S {
    WORD    bfType;
    DWORD   bfSize;
    WORD    bfReserved1;
    WORD    bfReserved2;
    DWORD   bfOffBits;
};
typedef struct {
    DWORD      biSize;//信息头大小
    LONG       biWidth;//图像宽度
    LONG       biHeight;//图像高度
    WORD       biPlanes;//位平面数,必须为1
    WORD       biBitCount;//每像素位数
    DWORD      biCompression;//压缩类型
    DWORD      biSizeImage;//压缩图像大小字节数
    LONG       biXPelsPerMeter;//水平分辨率
    LONG       biYPelsPerMeter;//垂直分辨率
    DWORD      biClrUsed;//位图实际用到的色彩数
    DWORD      biClrImportant;//本位图中重要的色彩数
} BMPINFOHEADER_T;//位图信息头定义

typedef void(__stdcall* NTPROC)(DWORD*, DWORD*, DWORD*);

int getNtVersion() {
    HINSTANCE hinst = LoadLibrary("ntdll.dll");
    DWORD major, minor, build;
    NTPROC proc = reinterpret_cast<NTPROC>(GetProcAddress(hinst, "RtlGetNtVersionNumbers"));
    proc(&major, &minor, &build);
    return major;
}

void ScreenShot() {
    if (GetAsyncKeyState('0')) {
        // 生成时间戳 (格式: 年月日_时分秒)
        auto now = system_clock::now();
        auto in_time_t = system_clock::to_time_t(now);
        stringstream timestamp;
        timestamp << put_time(localtime(&in_time_t), "%Y%m%d_%H%M%S");

        // 构建PowerShell命令
        string command =
            "powershell -Command \""
            "$timestamp = '" + timestamp.str() + "'; "
            "Add-Type -AssemblyName System.Windows.Forms; "
            "Add-Type -AssemblyName System.Drawing; "
            "$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds; "
            "$bitmap = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height); "
            "$graphic = [System.Drawing.Graphics]::FromImage($bitmap); "
            "$graphic.CopyFromScreen([System.Drawing.Point]::Empty, [System.Drawing.Point]::Empty, $screen.Size); "
            "$bitmap.Save(\\\"C:\\screenshot_$timestamp.png\\\", [System.Drawing.Imaging.ImageFormat]::Png)\"";

        // 执行命令
        system(command.c_str());
        MessageBox(NULL, "截图成功", "提示", MB_OK);
    }
}

void generateBmp( BYTE * pData, int width, int height, const  char * filename ) { //生成Bmp图片,传递RGB值,传递图片像素大小,传递图片存储路径
    int size = width * height * 3; // 每个像素点3个字节
    // 位图第一部分,文件信息
    BMPFILEHEADER_T bfh;
    bfh.bfType = 0X4d42;  //bm
    bfh.bfSize = size  // data size
                 + sizeof( BMPFILEHEADER_T ) // first section size
                 + sizeof( BMPINFOHEADER_T ) // second section size
                 ;
    bfh.bfReserved1 = 0; // reserved
    bfh.bfReserved2 = 0; // reserved
    bfh.bfOffBits = bfh.bfSize - size;

    // 位图第二部分,数据信息
    BMPINFOHEADER_T bih;
    bih.biSize = sizeof(BMPINFOHEADER_T);
    bih.biWidth = width;
    bih.biHeight = height;
    bih.biPlanes = 1;
    bih.biBitCount = 24;
    bih.biCompression = 0;
    bih.biSizeImage = size;
    bih.biXPelsPerMeter = 0;
    bih.biYPelsPerMeter = 0;
    bih.biClrUsed = 0;
    bih.biClrImportant = 0;
    FILE * fp = fopen( filename, "wb" );
    if ( !fp ) return;
    fwrite( &bfh, 1, sizeof(BMPFILEHEADER_T), fp );
    fwrite( &bih, 1, sizeof(BMPINFOHEADER_T), fp );
    fwrite( pData, 1, size, fp );
    fclose( fp );
}

void drawBMP() {
    int i = 0, j = 0;
    struct {
        BYTE b;
        BYTE g;
        BYTE r;
    } pRGB[240][320];  // 定义位图数据
    memset( pRGB, 0, sizeof(pRGB) ); // 设置背景为黑色
    // 在中间画一个100*100的矩形
    for (  i = 70; i < 170; i++ ) {
        for ( j = 110; j < 210; j++ ) {
            pRGB[i][j].r = 0x3f;
            pRGB[i][j].g = 0x3f;
            pRGB[i][j].b = 0x3f;
        }
    }
    // 生成BMP图片
    generateBmp( ( BYTE*)pRGB, 320, 240, "C:\\rgb.bmp" );
}

// 梯形顶点计算
void CalculateTrapezoidPoints(POINT start, POINT end, POINT points[4]) {
    int height = abs(end.y - start.y);         // 垂直高度
    int topWidth = abs(end.x - start.x);       // 上底宽度
    int bottomWidth = topWidth + height * 2;  // 下底宽度

    points[0] = start;                        // 左上顶点
    points[1] = { start.x + topWidth, start.y }; // 右上顶点
    points[2] = { end.x + bottomWidth, end.y }; // 右下顶点
    points[3] = { end.x - bottomWidth, end.y }; // 左下顶点
}

// 三角形顶点计算函数
void CalculateTrianglePoints(POINT start, POINT end, POINT points[3]) {
    // 计算底边中点
    POINT baseMid = {
        (start.x + end.x) / 2,
        (start.y + end.y) / 2
    };

    // 计算高度方向
    int height = static_cast<int>(sqrt(
                                      pow(end.x - start.x, 2) +
                                      pow(end.y - start.y, 2)
                                  )) / 2;

    // 设置三个顶点(等腰三角形)
    points[0] = start;                     // 左顶点
    points[1] = end;                       // 右顶点
    points[2] = { baseMid.x, baseMid.y - height }; // 顶点
}

void InitTrayIcon(HWND hwnd) {
    g_nid.cbSize = sizeof(NOTIFYICONDATA);
    g_nid.hWnd = hwnd;
    g_nid.uID = 1;
    g_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    g_nid.uCallbackMessage = WM_TRAY_ICON;
    g_nid.hIcon = LoadIcon(NULL, IDI_INFORMATION);
}

// 切换托盘状态
void ToggleTrayMode(HWND hwnd) {
    if (!g_isInTray) {
        // 最小化到托盘
        ShowWindow(hwnd, SW_HIDE);
        Shell_NotifyIcon(NIM_ADD, &g_nid);
    } else {
        // 恢复窗口
        ShowWindow(hwnd, SW_SHOW);
        Shell_NotifyIcon(NIM_DELETE, &g_nid);
    }
    g_isInTray = !g_isInTray;
}

// 初始化双缓冲
void InitDoubleBuffer(HWND hwnd) {
    RECT rc;
    GetClientRect(hwnd, &rc);
    g_width = rc.right - rc.left;
    g_height = rc.bottom - rc.top;
    HDC hdc = GetDC(hwnd);
    g_hMemDC = CreateCompatibleDC(hdc);
    g_hMemBitmap = CreateCompatibleBitmap(hdc, g_width, g_height);
    SelectObject(g_hMemDC, g_hMemBitmap);
    ReleaseDC(hwnd, hdc);
    // 初始清屏(可选)
    FillRect(g_hMemDC, &rc, (HBRUSH)GetStockObject(WHITE_BRUSH));
    HBRUSH hWhiteBrush = CreateSolidBrush(RGB(255, 255, 255));
    FillRect(g_hMemDC, &rc, hWhiteBrush);
    DeleteObject(hWhiteBrush);
}

// 切换全屏函数
void ToggleFullscreen(HWND hwnd) {
    if (!g_isFullscreen) {
        // 进入全屏
        GetWindowRect(hwnd, &g_originalRect);
        g_originalStyle = GetWindowLongPtr(hwnd, GWL_STYLE);
        int screenWidth = GetSystemMetrics(SM_CXSCREEN);
        int screenHeight = GetSystemMetrics(SM_CYSCREEN);

        SetWindowLongPtr(hwnd, GWL_STYLE, WS_POPUP);
        SetWindowPos(hwnd, HWND_TOP,
                     0, 0, screenWidth, screenHeight,
                     SWP_FRAMECHANGED | SWP_SHOWWINDOW
                    );
    } else {
        // 退出全屏
        SetWindowLongPtr(hwnd, GWL_STYLE, g_originalStyle);
        SetWindowPos(hwnd, NULL,
                     g_originalRect.left,
                     g_originalRect.top,
                     g_originalRect.right - g_originalRect.left,
                     g_originalRect.bottom - g_originalRect.top,
                     SWP_FRAMECHANGED | SWP_NOZORDER
                    );
    }
    g_isFullscreen = !g_isFullscreen;
}

// 切换密码显示模式
void TogglePasswordMode(HWND hwnd) {
    // 保存当前文本
    wchar_t szText[256] = {0};
    GetWindowTextW(hEdit, szText, 256);

    // 获取当前窗口位置
    RECT rc;
    GetWindowRect(hEdit, &rc);
    MapWindowPoints(HWND_DESKTOP, GetParent(hEdit), (LPPOINT)&rc, 2);

    // 销毁旧编辑框
    DestroyWindow(hEdit);

    // 创建新编辑框(切换样式)
    DWORD style = WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL;
    if (g_isPasswordMode) {
        style |= ES_PASSWORD;
    }

    hEdit = CreateWindowW(
                L"EDIT", szText,
                style,
                rc.left, rc.top,
                rc.right - rc.left,
                rc.bottom - rc.top,
                hwnd, (HMENU)IDC_EDIT_PWD,
                NULL,
                NULL
            );

    // 更新模式状态
    g_isPasswordMode = !g_isPasswordMode;

    // 更新按钮文本
    SetWindowTextW(GetDlgItem(hwnd, IDC_BTN_TOGGLE),
                   g_isPasswordMode ? L"隐藏密码" : L"显示明文");
}

void ShowTodayLuck() {
    // 初始化随机种子(使用当前时间)
    mt19937 mt(time(0));
    // 生成0-100的随机数
    int luck_value = mt() % 100+1;

    // 构建输出字符串
    string message;
    if (luck_value == 100) {
        message = "人品100 人品爆棚";
    } else if (luck_value > 80) {  // 81-99
        message = "人品" + to_string(luck_value) + " 人品还不错";
    } else if (luck_value > 20) {  // 21-80
        message = "人品" + to_string(luck_value) + " 人品还凑合";
    } else {  // 0-20
        message = "人品:" + to_string(luck_value) + " 人品太差了,请去拜佛";
    }
    // 弹窗显示结果
    MessageBoxA(nullptr, message.c_str(), "运势", MB_OK);
}

// 窗口过程函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
    switch (msg) {
        case WM_SETCURSOR:
            if (LOWORD(lParam) == HTCLIENT) {
                HCURSOR hCursor = NULL;
                switch (currentCursor) {
                    case ARROW:
                        hCursor = LoadCursor(NULL, IDC_CROSS);
                        break;
                    case HAND:
                        hCursor = LoadCursor(NULL, IDC_ARROW);
                        break;
                    case CROSS:
                        hCursor = LoadCursor(NULL, IDC_HAND );
                        break;
                }
                SetCursor(hCursor);
                return TRUE;
            }
            return TRUE;
            break;
        case WM_SIZE:
            // 窗口大小变化时重置缓冲
            if (g_hMemDC) {
                DeleteDC(g_hMemDC);
                DeleteObject(g_hMemBitmap);
            }
            InitDoubleBuffer(hwnd);
            break;
        case WM_KEYDOWN:
            if (wParam == VK_BACK) { // 按Backspace切换全屏
                ToggleFullscreen(hwnd);
            } else if (wParam == VK_CONTROL) {
                DestroyWindow(hwnd);
                HWND hwnwd;
                hwnwd = FindWindow("ConsoleWindowClass", NULL);
                if (hwnwd) {
                    ShowOwnedPopups(hwnwd, SW_SHOW);
                    ShowWindow(hwnwd, SW_SHOW);
                }
            }
            return 0;
        case WM_PAINT: {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
            HDC hMemDC = CreateCompatibleDC(hdc);
            HBITMAP hBmp = CreateCompatibleBitmap(hdc, ps.rcPaint.right, ps.rcPaint.bottom);
            SelectObject(hMemDC, hBmp);
            FillRect(hMemDC, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
            if (g_isDrawing) {
                HBRUSH hBrush = CreateSolidBrush(g_colors[g_currentColor]);
                SelectObject(hMemDC, hBrush);
                switch (g_currentShape) {
                    case CIRCLE: {
                        int radius = static_cast<int>(sqrt(
                                                          pow(g_endPos.x - g_startPos.x, 2) +
                                                          pow(g_endPos.y - g_startPos.y, 2)));
                        Ellipse(hMemDC,
                                g_startPos.x - radius, g_startPos.y - radius,
                                g_startPos.x + radius, g_startPos.y + radius);
                        break;
                    }
                    case SQUARE:
                        Rectangle(hMemDC,
                                  min(g_startPos.x, g_endPos.x),
                                  min(g_startPos.y, g_endPos.y),
                                  max(g_startPos.x, g_endPos.x),
                                  max(g_startPos.y, g_endPos.y));
                        break;
                    case TRIANGLE: {
                        POINT points[3];
                        CalculateTrianglePoints(g_startPos, g_endPos, points);
                        Polygon(hMemDC, points, 3);
                        break;
                    }
                    case TRAPEZOID: {
                        POINT points[4];
                        CalculateTrapezoidPoints(g_startPos, g_endPos, points);
                        Polygon(hMemDC, points, 4);
                        break;
                    }
                }
                DeleteObject(hBrush);
            }

            BitBlt(hdc, 0, 0, ps.rcPaint.right, ps.rcPaint.bottom, hMemDC, 0, 0, SRCCOPY);
            DeleteDC(hMemDC);
            DeleteObject(hBmp);
            EndPaint(hwnd, &ps);
            break;
        }
        case WM_CLOSE:
            // 清理托盘图标
            if (g_isInTray) Shell_NotifyIcon(NIM_DELETE, &g_nid);
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            KillTimer(hwnd, 1); // 销毁定时器
            PostQuitMessage(0);
            return 0;
            break;
        // 处理鼠标消息
        case WM_LBUTTONDOWN:
            g_startPos.x = LOWORD(lParam);
            g_startPos.y = HIWORD(lParam);
            g_isDrawing = true;
            return 0;

        case WM_LBUTTONUP:
            g_isDrawing = false;
            break;
        case WM_MOUSEMOVE:
            if (g_isDrawing) {
                g_endPos.x = LOWORD(lParam);
                g_endPos.y = HIWORD(lParam);
                InvalidateRect(hwnd, NULL, TRUE);
            }
            return 0;
        case WM_ERASEBKGND:
            return 1; // 禁用背景擦除
        case WM_CREATE: {
            CreateWindowW(L"BUTTON", L"切换颜色(当前:黑)",
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                          400, 90, 150, 30, hwnd,
                          (HMENU)IDC_BTN_COLOR, NULL, NULL);
            CreateWindowW(L"BUTTON", L"截图",
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                          400, 135, 150, 30, hwnd,
                          (HMENU)1082, NULL, NULL);
            // 创建获取时间
            hhwwnndd = CreateWindowW(
                           L"BUTTON", L"获取系统时间",
                           WS_CHILD | WS_VISIBLE | SS_CENTER,
                           20, 350, 150, 30,
                           hwnd, (HMENU)12345,
                           NULL, NULL
                       );
            CreateWindowW(
                           L"BUTTON", L"人品",
                           WS_CHILD | WS_VISIBLE | SS_CENTER,
                           20, 400, 150, 30,
                           hwnd, (HMENU)129,
                           NULL, NULL
                       );                   
            // 创建按钮
            CreateWindowW(L"BUTTON", L"切换图形(当前:方形)",
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                          400, 10, 220, 30, hwnd, (HMENU)1011, NULL, NULL);
            CreateWindowW(
                L"BUTTON", L"朗读",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                250, 300, 80, 30,
                hwnd, (HMENU)IDC_BTN_SPEAK,
                NULL, NULL
            );
            CreateWindowW(L"BUTTON", L"最小化到托盘",
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                          400, 50, 150, 30, hwnd,
                          (HMENU)IDC_BTN_TRAY, NULL, NULL);
            // 创建按钮
            CreateWindow("BUTTON", "切换光标", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                         20, 450, 100, 30, hwnd, (HMENU)32, NULL, NULL);
            // 初始化托盘
            InitTrayIcon(hwnd);
            // 创建按钮
            hButton = CreateWindow(
                          "BUTTON",                     // 窗口类(按钮)
                          "点击我关闭",                     // 按钮文本
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
                          50, 50,                       // 位置 (x, y)
                          100, 30,                       // 大小 (宽度, 高度)
                          hwnd,                         // 父窗口句柄
                          (HMENU)1,                     // 控件ID
                          ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
                          NULL                          // 附加数据
                      );
            CreateWindow(
                "BUTTON",                     // 窗口类(按钮)
                "版本号",                     // 按钮文本
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
                10, 10,                       // 位置 (x, y)
                100, 30,                       // 大小 (宽度, 高度)
                hwnd,                         // 父窗口句柄
                (HMENU)15423,                     // 控件ID
                ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
                NULL                          // 附加数据
            );
            CreateWindow(
                "BUTTON",                     // 窗口类(按钮)
                "生成图片(C盘)",                     // 按钮文本
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
                180, 10,                       // 位置 (x, y)
                120, 30,                       // 大小 (宽度, 高度)
                hwnd,                         // 父窗口句柄
                (HMENU)1023,                     // 控件ID
                ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
                NULL                          // 附加数据
            );
            hButton2 = CreateWindow(
                           "BUTTON",                     // 窗口类(按钮)
                           "点击我切换全屏",                     // 按钮文本
                           WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
                           850, 50,                       // 位置 (x, y)
                           100, 30,                       // 大小 (宽度, 高度)
                           hwnd,                         // 父窗口句柄
                           (HMENU)2,                     // 控件ID
                           ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
                           NULL                          // 附加数据
                       );
            hButton2 = CreateWindow(
                           "BUTTON",                     // 窗口类(按钮)
                           "在桌面新建快捷方式",                     // 按钮文本
                           WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, // 样式
                           750, 10,                       // 位置 (x, y)
                           200, 30,                       // 大小 (宽度, 高度)
                           hwnd,                         // 父窗口句柄
                           (HMENU)324,                     // 控件ID
                           ((LPCREATESTRUCT)lParam)->hInstance, // 实例句柄
                           NULL                          // 附加数据
                       );
            // 创建切换按钮
            CreateWindowW(
                L"BUTTON", L"隐藏密码",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                100, 300, 80, 30,
                hwnd, (HMENU)IDC_BTN_TOGGLE,
                NULL, NULL
            );
            hEdit = CreateWindowW(L"EDIT", L"",
                                  WS_CHILD | WS_VISIBLE | WS_BORDER | ES_AUTOHSCROLL,
                                  20, 250, 200, 25, hwnd,  (HMENU)IDC_EDIT1, NULL, NULL);

            CreateWindowW(L"BUTTON", L"示例输入",
                          WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                          20, 300, 80, 30, hwnd, (HMENU)IDC_BUTTON_SUBMIT, NULL, NULL);
            // 创建复制按钮
            CreateWindowW(
                L"BUTTON", L"复制",
                WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
                180, 300, 80, 30,
                hwnd, (HMENU)IDC_BTN_COPY,
                NULL, NULL
            );
            return 0;
        }
        case WM_TRAY_ICON:
            if (lParam == WM_LBUTTONDBLCLK) {
                ToggleTrayMode(hwnd);
            }
            return 0;
        // 禁用系统最小化操作
        case WM_SYSCOMMAND:
            if (wParam == SC_MAXIMIZE || wParam == SC_CLOSE) {
                MessageBox(
                    hwnd,
                    "没有执行命令的权限",
                    "提示",
                    MB_OK | MB_ICONERROR
                );
                return 0;
            }
            break;
        case WM_COMMAND: {
            if (LOWORD(wParam) == IDC_BTN_SPEAK) {
                wchar_t buffer[256];
                GetWindowTextW(hEdit, buffer, 256); // 获取输入框内容
                if (wcslen(buffer) == 0) {
                    MessageBoxW(hwnd, L"输入不能为空", L"错误", MB_ICONERROR);
                } else {
                    // 转义双引号防止VBS语法错误
                    wstring text = buffer;
                    size_t pos = 0;
                    while ((pos = text.find(L'"', pos)) != std::wstring::npos) {
                        text.replace(pos, 1, L"\"\"");
                        pos += 2;
                    }
                    // 写入临时VBS文件
                    wofstream vbsFile("speak2.vbs");
                    vbsFile.imbue(std::locale(std::locale::classic(), new std::codecvt_utf8<wchar_t>));
                    if (vbsFile.is_open()) {
                        vbsFile << L"Set speech = CreateObject(\"SAPI.SpVoice\")\n";
                        vbsFile << L"speech.Speak \"";
                        vbsFile << buffer;
                        vbsFile << L"\"\n";
                        vbsFile.close();

                        // 执行脚本并删除临时文件
                        system("wscript speak2.vbs");
//                        _wremove(L"speak.vbs");
                    } else {
                        MessageBoxW(hwnd, L"临时文件创建失败", L"错误", MB_ICONERROR);
                    }
                }
            }
            if (LOWORD(wParam) == 1011) {
                g_currentShape = static_cast<ShapeType>((g_currentShape + 1) % 4);
                // 更新按钮文本
                const wchar_t* texts[] = {
                    L"切换图形(当前:长方形)",
                    L"切换图形(当前:圆形)",
                    L"切换图形(当前:三角形)",
                    L"切换图形(当前:梯形)"
                };
                SetWindowTextW(GetDlgItem(hwnd, 1011), texts[g_currentShape]);
                InvalidateRect(hwnd, NULL, TRUE);
            }
            if (LOWORD(wParam) == IDC_BTN_COLOR) {
                g_currentColor = (g_currentColor + 1) % 3;
                const wchar_t* colorText[] = { L"红", L"黑", L"蓝" };
                wchar_t btnText[50];
                wsprintfW(btnText, L"切换颜色(当前:%s)", colorText[g_currentColor]);
                SetWindowTextW(GetDlgItem(hwnd, IDC_BTN_COLOR), btnText);
                InvalidateRect(hwnd, NULL, TRUE);
            }
            if (LOWORD(wParam) == IDC_BTN_COPY) {
                // 获取输入框内容
                wchar_t szText[256];
                GetWindowTextW(hEdit, szText, 256);

                // 打开剪贴板
                if (OpenClipboard(hwnd)) {
                    // 清空剪贴板
                    EmptyClipboard();

                    // 分配全局内存
                    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, (wcslen(szText) + 1) * sizeof(wchar_t));
                    if (hGlobal) {
                        // 锁定内存并复制数据
                        wchar_t* pGlobal = (wchar_t*)GlobalLock(hGlobal);
                        wcscpy(pGlobal,  szText);
                        GlobalUnlock(hGlobal);

                        // 设置剪贴板数据
                        SetClipboardData(CF_UNICODETEXT, hGlobal);
                    }

                    // 关闭剪贴板
                    CloseClipboard();
                }

                // 提示用户
                MessageBoxW(hwnd, L"内容已复制到剪贴板!", L"成功", MB_OK);
            }
            // 假设按钮的ID是IDC_BUTTON1
            if (LOWORD(wParam) == 32) {
                if (currentCursor == CROSS) {
                    currentCursor = HAND;
                } else if (currentCursor == HAND) {
                    currentCursor = ARROW;
                } else {
                    currentCursor = CROSS;
                }
                // 强制更新光标
                PostMessage(hwnd, WM_SETCURSOR, (WPARAM)hwnd, HTCLIENT);
            }
            if (wParam == 12345) { //ID为12345
                // 获取本地时间
                SYSTEMTIME st;
                GetLocalTime(&st);

                // 格式化时间字符串
                wchar_t timeStr[64];
                _snwprintf(timeStr, 64,
                           L"%04d-%02d-%02d %02d:%02d:%02d",
                           st.wYear, st.wMonth, st.wDay,
                           st.wHour, st.wMinute, st.wSecond);

//                // 更新静态文本
//                SetWindowTextW(hStaticTime, timeStr);

//                 可选:弹出消息框显示
                MessageBoxW(hwnd, timeStr, L"系统时间", MB_OK);
            }
            if (LOWORD(wParam) == IDC_BTN_TRAY) {
                ToggleTrayMode(hwnd);
            }
            if (LOWORD(wParam) == 324) {
                MessageBoxW(hwnd, L"请先在D盘创建Draw.cpp,若已经创建,请忽略!", L"提示", MB_OK);
                system("powershell -command \"$WshShell=New-Object -comObject WScript.Shell; $Shortcut=$WshShell.CreateShortcut(\'%UserProfile%\\Desktop\\Draw.lnk\'); $Shortcut.TargetPath=\'D:\\Draw.exe'; $Shortcut.Save()\"");
                MessageBoxW(hwnd, L"创建成功!", L"成功", MB_OK);
            }
            if (LOWORD(wParam) == IDC_BUTTON_SUBMIT) {
                wchar_t buffer[256];
                GetWindowTextW(hEdit, buffer, 256);

                if (wcslen(buffer) == 0) {
                    MessageBoxW(hwnd, L"输入不能为空!", L"错误", MB_ICONERROR);
                } else {
                    MessageBoxW(hwnd, buffer, L"输入内容", MB_OK);
                }
            }
            if (LOWORD(wParam) == IDC_BTN_TOGGLE) {
                TogglePasswordMode(hwnd);
            }
            if (LOWORD(wParam) == 15423) {
                MessageBoxW(hwnd, L"v1.28.6", L"版本号", MB_OK);
            }

            int ButtonID = LOWORD(wParam);
            switch (ButtonID) {
                case 1:
                    DestroyWindow(hwnd);
                    HWND hwnwd;
                    hwnwd = FindWindow("ConsoleWindowClass", NULL);
                    if (hwnwd) {
                        ShowOwnedPopups(hwnwd, SW_SHOW);
                        ShowWindow(hwnwd, SW_SHOW);
                    }
                    break;
                case 2:
                    ToggleFullscreen(hwnd);
                    break;
                case 1023:
                    drawBMP();
                    break;
                case 1082:
                    ScreenShot();
                    break;
                case 129: 
                    ShowTodayLuck();
                    break;
            }
        }
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, [[maybe_unused]] LPSTR pCmdLine, [[maybe_unused]] int nCmdShow) {
    if (getNtVersion() <= 9) {
        cout << "需要Win10/11支持" << endl;
        exit(0);
    } else {
        cout << "您的电脑支持" << endl;
    }
    system("pause");
    HWND hwnwd;
    hwnwd = FindWindow("ConsoleWindowClass", NULL);
    if (hwnwd) {
        ShowOwnedPopups(hwnwd, SW_HIDE);
        ShowWindow(hwnwd, SW_HIDE);
    }
    const char* CLASS_NAME = "CustomWindowClass";

    WNDCLASS wc = {};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.lpszClassName = TEXT(CLASS_NAME);
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

    if (!RegisterClass(&wc)) return 0;

    // 创建窗口
    HWND hwnd = CreateWindowEx(
                    0,                              // 扩展样式
                    TEXT(CLASS_NAME),                     // 窗口类
                    " 绘画   v1.28.6",                   // 窗口标题
                    WS_OVERLAPPEDWINDOW | WS_VISIBLE, // 窗口样式
                    CW_USEDEFAULT, CW_USEDEFAULT,   // 位置
                    1000, 1000,                       // 大小
                    NULL,                           // 父窗口
                    NULL,                           // 菜单
                    hInstance,                      // 实例句柄
                    NULL                            // 附加数据
                );

    if (!hwnd) return 0;

    // 消息循环
    MSG msg = {};
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
//水印

源代码(点个关注,礼貌领取)

若有改进之处,欢迎评论留言

x=?

点个关注吧,长期更新此绘图工具

——————————————————————全剧终...

点个关注吧,长期更新此绘图工具

彩蛋

#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
using namespace chrono;
 
void ScreenShot() {
	if (GetAsyncKeyState('0')) {
		// 生成时间戳 (格式: 年月日_时分秒)
		auto now = system_clock::now();
		auto in_time_t = system_clock::to_time_t(now);
		stringstream timestamp;
		timestamp << put_time(localtime(&in_time_t), "%Y%m%d_%H%M%S");
 
		// 构建PowerShell命令
		string command =
		    "powershell -Command \""
		    "$timestamp = '" + timestamp.str() + "'; "
		    "Add-Type -AssemblyName System.Windows.Forms; "
		    "Add-Type -AssemblyName System.Drawing; "
		    "$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds; "
		    "$bitmap = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height); "
		    "$graphic = [System.Drawing.Graphics]::FromImage($bitmap); "
		    "$graphic.CopyFromScreen([System.Drawing.Point]::Empty, [System.Drawing.Point]::Empty, $screen.Size); "
		    "$bitmap.Save(\\\"C:\\screenshot_$timestamp.png\\\", [System.Drawing.Imaging.ImageFormat]::Png)\"";
 
		// 执行命令
		system(command.c_str());
		MessageBox(NULL, "截图成功", "提示", NULL);
	}
}
 
int main() {
	while (1) {
		ScreenShot();
	}
}
#include <fstream>
#include <cstdlib> // 用于system函数
using namespace std;
int main() {
    // 创建并写入VBS文件
    ofstream vbsFile("speak.vbs");
    if (vbsFile.is_open()) {
        vbsFile << "Set speech = CreateObject(\"SAPI.SpVoice\")\nspeech.Speak \" 你干嘛\"\n";
        vbsFile.close();
        
        // 运行VBS脚本
        system("wscript speak.vbs");
        remove("speak.vbs");
    }
    return 0;
}
#include<bits/stdc++.h>
using namespace std;

struct Note {
	struct Time {
		string year;
		string month;
		string day;
	} time;
	string note;
	struct Weather {
		enum {
			sunny,
			rainy,
			windy,
			snowy,
			cloudy
		} wether = sunny;
		enum {
			spring,
			summer,
			autumn,
			winter
		} season;
	} wea;
	void operator << ( [[maybe_unused]] Note note)const {
		cout << "Time:" << endl;
		cout << "  " << time.year << " year" << endl;
		cout << "  " << time.month << " month" << endl;
		cout << "  " << time.day << " day" << endl;
		cout << "Note:" << endl;
		cout << "  " << this->note << endl;
		cout << "Weather:" << endl << "  ";
		switch (wea.wether) {
			case wea.sunny:
				cout << "sunny";
				break;
			case wea.rainy:
				cout << "rainy";
				break;
			case wea.windy:
				cout << "windy";
				break;
			case wea.cloudy:
				cout << "cloudy";
				break;
			default:
				cout << "snowy";
				break;
		}
		cout << " ";
		switch (wea.season) {
			case wea.spring:
				cout << "spring";
				break;
			case wea.summer:
				cout << "summer";
				break;
			case wea.autumn:
				cout << "autumn";
				break;
			default:
				cout << "winter";
				break;
		}
	}
	void operator >> (Note &n) {
		cin >> n.time.year >> n.time.month >> n.time.day >> n.note;
	}
} no;

struct Out_note {
	void operator << ( [[maybe_unused]] Note note)const {
		no << no;
	}
} out;

struct In_note {
	void operator >> (Note &n) {
		cin >> n.time.year >> n.time.month >> n.time.day >> n.note;
		string s,s2;
		getline(cin, s);

	}
} in;

int main() {
	no >> no;
	no.wea.wether = no.wea.cloudy;
	no.wea.season = no.wea.spring;
	out << no;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值