当前位置: 首页 > article >正文

在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组

在 Dev-C++中编译运行GUI程序介绍(三)有趣示例一组

前期见
在 Dev-C++中编译运行GUI 程序介绍(一)基础 https://blog.csdn.net/cnds123/article/details/147019078

在 Dev-C++中编译运行GUI 程序介绍(二)示例:祝福程序 https://blog.csdn.net/cnds123/article/details/147019350

本文给出一组可以在 Dev-C++中编译运行的GUI 应用程序。

示例2、简单的猜数字游戏

下面是一个简单的猜数字游戏源码,您可以在 Dev-C++ 中编译和运行它。这个程序创建了一个基本的 GUI 界面,用户可以通过输入数字来进行猜测,程序会提示用户猜的数字是太高、太低还是猜对了。并有猜中计数和“重玩”按钮功能。

运行效果:

源码如下:

#include <windows.h>
#include <string>
#include <cstdlib>
#include <ctime>using namespace std;// 全局变量
HWND hwndInput, hwndButton, hwndOutput, hwndCountLabel;
int randomNumber;
int guessCount = 0; // 猜中计数// 生成随机数
void generateRandomNumber() {randomNumber = rand() % 100 + 1; // 生成 1 到 100 之间的随机数guessCount = 0; // 重置猜中计数
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建说明标签CreateWindow("STATIC", "请输入1到100之间的数字:", WS_CHILD | WS_VISIBLE,50, 20, 200, 25, hwnd, NULL, NULL, NULL);// 创建输入框hwndInput = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 50, 100, 25, hwnd, NULL, NULL, NULL);// 创建猜测按钮hwndButton = CreateWindow("BUTTON", "猜测", WS_CHILD | WS_VISIBLE,50, 100, 100, 30, hwnd, (HMENU)1, NULL, NULL);// 创建重玩按钮CreateWindow("BUTTON", "重玩", WS_CHILD | WS_VISIBLE,160, 100, 100, 30, hwnd, (HMENU)2, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,50, 150, 200, 25, hwnd, NULL, NULL, NULL);// 创建猜中计数标签hwndCountLabel = CreateWindow("STATIC", "猜测次数: 0", WS_CHILD | WS_VISIBLE,50, 180, 200, 25, hwnd, NULL, NULL, NULL);generateRandomNumber(); // 生成第一个随机数// 设置光标焦点到输入框SetFocus(hwndInput);break;}case WM_COMMAND: {if (LOWORD(wParam) == 1) { // 按钮被点击char buffer[10];GetWindowText(hwndInput, buffer, sizeof(buffer)); // 获取输入的文本int guess = atoi(buffer); // 将字符串转换为整数// 进行猜测判断string message;guessCount++; // 增加猜测次数if (guess < randomNumber) {message = "太低了!";} else if (guess > randomNumber) {message = "太高了!";} else {message = "恭喜你,猜对了!";// 不重置猜测次数,直到用户选择“重玩”}// 更新输出框和猜中计数标签SetWindowText(hwndOutput, message.c_str());SetWindowText(hwndCountLabel, ("猜测次数: " + to_string(guessCount)).c_str());// 设置光标焦点到输入框SetFocus(hwndInput);}else if (LOWORD(wParam) == 2) { // 重玩按钮被点击generateRandomNumber(); // 生成新的随机数SetWindowText(hwndOutput, ""); // 清空输出框SetWindowText(hwndCountLabel, "猜测次数: 0"); // 重置猜中计数SetWindowText(hwndInput, ""); // 清空输入框SetFocus(hwndInput); // 设置光标焦点到输入框}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {srand(static_cast<unsigned int>(time(0))); // 设置随机种子// 注册窗口类const char CLASS_NAME[] = "GuessNumberWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "猜数字游戏", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

示例3、剪子、包袱、锤游戏

剪子、包袱、锤(又称石头剪刀布)游戏规则

胜负关系:

剪子 胜 包袱(剪刀剪开布)。

包袱 胜 锤(布包裹石头)。

锤 胜 剪子(石头砸坏剪刀)。

手势相同:平局,重新对决。

界面如下

源码如下:

//剪子、包袱、锤游戏
#include <windows.h>
#include <string>
#include <cstdlib>
#include <ctime>
#include <sstream>using namespace std;// 全局变量
HWND hwndOutput, hwndComputerChoice;
int computerChoice;// 生成计算机的选择
void generateComputerChoice() {computerChoice = rand() % 3; // 0 = 剪子, 1 = 包袱, 2 = 锤
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建剪子按钮CreateWindow("BUTTON", "剪子 (X)", WS_CHILD | WS_VISIBLE,50, 50, 100, 30, hwnd, (HMENU)1, NULL, NULL);// 创建包袱按钮CreateWindow("BUTTON", "包袱 (Q)", WS_CHILD | WS_VISIBLE,50, 100, 100, 30, hwnd, (HMENU)2, NULL, NULL);// 创建锤按钮CreateWindow("BUTTON", "锤 (P)", WS_CHILD | WS_VISIBLE,50, 150, 100, 30, hwnd, (HMENU)3, NULL, NULL);// 创建新局按钮CreateWindow("BUTTON", "新局", WS_CHILD | WS_VISIBLE,50, 200, 100, 30, hwnd, (HMENU)4, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,200, 50, 200, 100, hwnd, NULL, NULL, NULL);// 创建计算机选择显示框hwndComputerChoice = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,200, 150, 200, 25, hwnd, NULL, NULL, NULL);// 设置随机种子srand(static_cast<unsigned int>(time(0)));break;}case WM_COMMAND: {if (LOWORD(wParam) >= 1 && LOWORD(wParam) <= 3) { // 剪子、包袱或锤按钮被点击int userChoice = LOWORD(wParam) - 1; // 0 = 剪子, 1 = 包袱, 2 = 锤generateComputerChoice(); // 生成计算机选择// 计算机选择对应的输出来显示string computerChoiceStr;if (computerChoice == 0) computerChoiceStr = "剪子 (X)";else if (computerChoice == 1) computerChoiceStr = "包袱 (Q)";else if (computerChoice == 2) computerChoiceStr = "锤 (P)";// 判断输赢string result;if (userChoice == computerChoice) {result = "平局!";} else if ((userChoice == 0 && computerChoice == 1) || (userChoice == 1 && computerChoice == 2) || (userChoice == 2 && computerChoice == 0)) {result = "你输了!";} else {result = "你赢了!";}// 更新输出框和计算机选择框SetWindowText(hwndOutput, result.c_str());SetWindowText(hwndComputerChoice, ("计算机选择: " + computerChoiceStr).c_str());} else if (LOWORD(wParam) == 4) { // 新局按钮被点击SetWindowText(hwndOutput, ""); // 清空输出框SetWindowText(hwndComputerChoice, ""); // 清空计算机选择框}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "RockPaperScissorsWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "剪子、包袱、锤游戏", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 420, 300, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

示例4、简单计算器

可以在 Dev-C++ 中编译和运行简单计算器(通过计算机键盘输入数)。

界面如下:

代码如下:

#include <windows.h>
#include <string>
#include <sstream>using namespace std;// 全局变量
HWND hwndInput1, hwndInput2, hwndOutput, hwndButtonAdd, hwndButtonSub, hwndButtonMul, hwndButtonDiv;// 计算结果并显示
void Calculate(char operation) {char buffer1[100], buffer2[100];GetWindowText(hwndInput1, buffer1, sizeof(buffer1)); // 获取第一个输入框的文本GetWindowText(hwndInput2, buffer2, sizeof(buffer2)); // 获取第二个输入框的文本double num1 = atof(buffer1); // 转换为 doubledouble num2 = atof(buffer2); // 转换为 doubledouble result = 0.0;// 根据操作符进行计算switch (operation) {case '+': result = num1 + num2; break;case '-': result = num1 - num2; break;case '*': result = num1 * num2; break;case '/':if (num2 != 0) {result = num1 / num2;} else {SetWindowText(hwndOutput, "错误:除以零");return;}break;}// 显示结果stringstream ss;ss << result;SetWindowText(hwndOutput, ss.str().c_str());
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建输入框1hwndInput1 = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 20, 100, 30, hwnd, NULL, NULL, NULL);// 创建输入框2hwndInput2 = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | WS_BORDER | ES_NUMBER,50, 60, 100, 30, hwnd, NULL, NULL, NULL);// 创建输出框hwndOutput = CreateWindow("STATIC", "", WS_CHILD | WS_VISIBLE,50, 100, 200, 30, hwnd, NULL, NULL, NULL);// 创建加法按钮hwndButtonAdd = CreateWindow("BUTTON", "+", WS_CHILD | WS_VISIBLE,200, 20, 30, 30, hwnd, (HMENU)1, NULL, NULL);// 创建减法按钮hwndButtonSub = CreateWindow("BUTTON", "-", WS_CHILD | WS_VISIBLE,200, 60, 30, 30, hwnd, (HMENU)2, NULL, NULL);// 创建乘法按钮hwndButtonMul = CreateWindow("BUTTON", "*", WS_CHILD | WS_VISIBLE,250, 20, 30, 30, hwnd, (HMENU)3, NULL, NULL);// 创建除法按钮hwndButtonDiv = CreateWindow("BUTTON", "/", WS_CHILD | WS_VISIBLE,250, 60, 30, 30, hwnd, (HMENU)4, NULL, NULL);break;}case WM_COMMAND: {if (LOWORD(wParam) == 1) { // 加法按钮被点击Calculate('+');} else if (LOWORD(wParam) == 2) { // 减法按钮被点击Calculate('-');} else if (LOWORD(wParam) == 3) { // 乘法按钮被点击Calculate('*');} else if (LOWORD(wParam) == 4) { // 除法按钮被点击Calculate('/');}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "SimpleCalculator";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "简单计算器", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, hInstance, NULL);ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

示例5、改进版的简单计算器

下面是一个改进版的简单计算器,界面上包含数字按键(0-9)和基本的运算按键(加、减、乘、除)。用户可以通过点击数字按键和运算符按键来输入数字和运算,然后按下“=”按钮来计算结果。

界面如下:

代码如下:

#include <windows.h>
#include <string>
#include <cstdlib>
#include <sstream>using namespace std;// 全局变量
HWND hwndDisplay;
string currentInput = ""; // 当前输入// 更新显示框
void UpdateDisplay() {SetWindowText(hwndDisplay, currentInput.c_str());
}// 处理数字和操作符的按钮点击
void ButtonClick(char value) {currentInput += value; // 追加输入UpdateDisplay();
}// 计算结果并显示
void Calculate() {double num1 = 0.0, num2 = 0.0;char operation = '+';size_t pos = 0;// 解析输入for (char c : currentInput) {if (c == '+' || c == '-' || c == '*' || c == '/') {num1 = atof(currentInput.substr(0, pos).c_str());operation = c;pos++;break;}pos++;}if (pos < currentInput.length()) {num2 = atof(currentInput.substr(pos).c_str());} else {return; // 没有足够的输入进行计算}double result = 0.0;// 根据操作符进行计算switch (operation) {case '+': result = num1 + num2; break;case '-': result = num1 - num2; break;case '*': result = num1 * num2; break;case '/':if (num2 != 0) {result = num1 / num2;} else {currentInput = "错误:除以零";UpdateDisplay();return;}break;}// 显示结果stringstream ss;ss << result;currentInput = ss.str(); // 更新为结果UpdateDisplay();
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_CREATE: {// 创建显示框hwndDisplay = CreateWindow("EDIT", "", WS_CHILD | WS_VISIBLE | ES_RIGHT | ES_READONLY,10, 10, 280, 30, hwnd, NULL, NULL, NULL);// 创建按钮const char* buttons[] = {"7", "8", "9", "+","4", "5", "6", "-","1", "2", "3", "*","0", ".", "=", "/"};int x = 10, y = 50;for (int i = 0; i < 16; ++i) {CreateWindow("BUTTON", buttons[i], WS_CHILD | WS_VISIBLE,x, y, 65, 40, hwnd, (HMENU)(INT_PTR)(i + 1), NULL, NULL);x += 70;if ((i + 1) % 4 == 0) {x = 10;y += 45;}}// 创建"清空"按钮CreateWindow("BUTTON", "清空", WS_CHILD | WS_VISIBLE,10, 230, 280, 30, hwnd, (HMENU)17, NULL, NULL);break;}case WM_COMMAND: {int id = LOWORD(wParam);if (id >= 1 && id <= 16) {const char* buttonValues[] = {"7", "8", "9", "+","4", "5", "6", "-","1", "2", "3", "*","0", ".", "=", "/"};if (buttonValues[id - 1][0] == '=') {Calculate();} else {ButtonClick(buttonValues[id - 1][0]);}} else if (id == 17) { // 清空按钮currentInput = "";UpdateDisplay();}break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {// 注册窗口类const char CLASS_NAME[] = "SimpleCalculator";WNDCLASS wc = {};wc.lpfnWndProc = WndProc;wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "手持计算器", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 315, 310, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg = {};while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

示例6、绘制直线、圆和三角形

Windows API中的GDI(Graphics Device Interface,图形设备接口)是一个用于处理图形和图像输出的子系统。它允许程序与各种输出设备(如显示器、打印机等设备无关性)进行交互,绘制图形、文本和图像。

GDI的作用

  1. 绘制图形:GDI提供了一系列函数,用于绘制基本形状(如线条、矩形、圆形、多边形等)。程序员可以使用这些函数在窗口上绘制想要的图形。
  2. 文本处理:GDI也可以用于绘制文本。它支持多种字体和文本格式,程序员可以选择字体、大小和颜色来显示文本。
  3. 图像处理:GDI能够加载并显示位图(BMP)、图标等图像格式。程序员可以将图像绘制到窗口或打印机上。
  4. 设备无关性:GDI使得程序可以不依赖于特定的硬件设备。无论是在显示器上绘制,还是在打印机上输出,GDI提供的接口都是一致的。这意味着,程序可以在不同的输出设备上运行,而不需要进行太多修改。
  5. 设备上下文(DC:在GDI中,设备上下文是一种数据结构,表示绘图设备的状态。程序在绘图时需要获取设备上下文,以便使用它来进行绘图操作。

GDI的基本操作

  1. 创建窗口:在窗口上绘制图形的第一步是创建一个窗口。这可以通过Windows API中的函数来实现。
  2. 获取设备上下文:在绘制之前,程序需要获取窗口的设备上下文(HDC),这样才能在窗口上进行绘制。
  3. 绘制操作
    • 使用GDI函数绘制图形(如MoveToEx和LineTo绘制直线)。
    • 使用TextOut函数绘制文本。
    • 使用BitBlt函数复制图像。
  4. 释放资源:绘制完成后,程序需要释放获取的设备上下文,以避免资源泄露。

先看效果图:

源码如下:

#include <windows.h>LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_PAINT: {PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);// 设置颜色HPEN hPen = CreatePen(PS_SOLID, 2, RGB(0, 0, 255)); // 蓝色SelectObject(hdc, hPen);// 画直线MoveToEx(hdc, 50, 50, NULL); // 起点LineTo(hdc, 200, 50); // 终点// 画圆Ellipse(hdc, 50, 70, 150, 170); // x1, y1, x2, y2// 画三角形POINT vertices[] = { {200, 70}, {250, 170}, {150, 170} };Polygon(hdc, vertices, 3);// 释放资源DeleteObject(hPen);EndPaint(hwnd, &ps);break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {const char CLASS_NAME[] = "SampleWindowClass";WNDCLASS wc = {};wc.lpfnWndProc = WndProc; // 设置窗口过程wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "绘图示例", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 400, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

示例7、绘制红五角星

使用Windows API中的GDI (图形设备接口)。

先看效果图:

源码如下:

#include <windows.h>
#include <math.h>#define M_PI 3.14159265358979323846 // 定义π(如未定义)// 计算五角星顶点的函数
void DrawStar(HDC hdc, int centerX, int centerY, int size) {POINT points[10];double angle;int i;// 计算五角星的顶点for (i = 0; i < 10; i++) {angle = (i * 36.0) * (M_PI / 180.0); // 角度转换为弧度// 外部顶点if (i % 2 == 0) {points[i].x = centerX + (int)(size * cos(angle));points[i].y = centerY - (int)(size * sin(angle));}// 内部顶点else {points[i].x = centerX + (int)(size * 0.5 * cos(angle));points[i].y = centerY - (int)(size * 0.5 * sin(angle));}}// 绘制五角星HPEN hPen = CreatePen(PS_SOLID, 2, RGB(255, 0, 0)); // 红色SelectObject(hdc, hPen);SelectObject(hdc, GetStockObject(NULL_BRUSH)); // 无填充Polygon(hdc, points, 10); // 绘制五角星// 释放资源DeleteObject(hPen);
}// 消息处理函数
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {switch (msg) {case WM_PAINT: {PAINTSTRUCT ps;HDC hdc = BeginPaint(hwnd, &ps);// 设置背景颜色FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));// 绘制红五角星DrawStar(hdc, 200, 150, 100);EndPaint(hwnd, &ps);break;}case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd, msg, wParam, lParam);}return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {const char CLASS_NAME[] = "StarDrawingWindow";WNDCLASS wc = {};wc.lpfnWndProc = WndProc; // 设置窗口过程wc.hInstance = hInstance;wc.lpszClassName = CLASS_NAME;RegisterClass(&wc);// 创建窗口HWND hwnd = CreateWindowEx(0, CLASS_NAME, "绘制红五角星", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hInstance, NULL);if (hwnd == NULL) {return 0;}ShowWindow(hwnd, nCmdShow);UpdateWindow(hwnd);// 消息循环MSG msg;while (GetMessage(&msg, NULL, 0, 0)) {TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

相关文章:

在 Dev-C++中编译运行GUI 程序介绍(三)有趣示例一组

在 Dev-C中编译运行GUI程序介绍&#xff08;三&#xff09;有趣示例一组 前期见 在 Dev-C中编译运行GUI 程序介绍&#xff08;一&#xff09;基础 https://blog.csdn.net/cnds123/article/details/147019078 在 Dev-C中编译运行GUI 程序介绍&#xff08;二&#xff09;示例&a…...

Compose 适配 - 响应式排版 自适应布局

一、概念 基于可用空间而非设备类型来设计自适应布局&#xff0c;实现设备无关性和动态适配性&#xff0c;避免硬编码&#xff0c;以不同形态布局更好的展示内容。 二、区分可用空间 WindowSizeClasses 传统根据屏幕大小和方向做适配的方式已不再适用&#xff0c;APP的显示方式…...

光储充智能协调控制系统的设计与应用研究

摘要 随着化石能源枯竭与环境污染问题加剧&#xff0c;构建高效、稳定的新能源系统成为能源转型的关键。本文针对光伏发电间歇性、储能系统充放电效率及充电桩动态负荷分配等技术挑战&#xff0c;提出一种基于智能协调管理的光储充一体化解决方案。通过多源数据融合与优化控制算…...

UE4 踩坑记录

1、Using git status to determine working set for adaptive non-unity build 我删除了一个没用的资源&#xff0c;结果就报这个错&#xff0c;原因就是这条命令导致的&#xff0c; 如果这个项目是git项目&#xff0c; ue编译时会优先通过 git status检查哪些文件被修改&#…...

C语言超详细指针知识(一)

通过前面一段学习C语言的学习&#xff0c;我们了解了数组&#xff0c;函数&#xff0c;操作符等相关知识&#xff0c;今天我们将要进行指针学习&#xff0c;这是C语言中较难的一个部分&#xff0c;我将带你由浅入深慢慢学习。 1.内存与地址 在正式学习指针前&#xff0c;我们首…...

《算法笔记》3.3小节——入门模拟->图形输出

1036 跟奥巴马一起编程 #include <iostream> #include <cmath> using namespace std;int main() {int n,m;char c;cin>>n>>c;for (int i 0; i < n; i) {cout<<c;}cout<<endl;m round(1.0*n/2)-2;//round里面不能直接写n/2&#xff0c;…...

【深入浅出 Git】:从入门到精通

这篇文章介绍下版本控制器。 【深入浅出 Git】&#xff1a;从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …...

在gitee上创建仓库——拉取到本地---添加文件---提交

2025/04/11/yrx0203 1-创建仓库 2-填写信息 3-创建完成后把仓库地址复制下来 4-在电脑上创建1个空的文件夹&#xff0c;进入这个文件夹&#xff0c;鼠标右击打开git bash 5-粘贴刚才复制的仓库的地址&#xff0c;回车 这样仓库就被拉取完成了 6-把本地的这个文件夹初始化…...

小刚说C语言刷题——第21讲 一维数组

在日常生活中&#xff0c;我们经常输入一组数据。例如输入一个班30名学生的语文成绩&#xff0c;或者输入一组商品的价格。这个时候&#xff0c;我们如何输入一组类型相同的数据呢&#xff1f;这里我们就要用到数组。 1.数组的概念 所谓数组就是一组相同类型数据的集合。数组中…...

芯片同时具备Wi-Fi、蓝牙、Zigbee,MAC地址会打架吗?

目录 【MAC 地址简介】 【MAC、Wi-Fi MAC、Bluetooth MAC的关系】 【以乐鑫ESP32-C6为例分析MAC】 【MAC 地址简介】 MAC&#xff08;Media Access Control&#xff09;地址是设备的物理地址&#xff0c;在全球范围内唯一标识每个网络接口。它是一个 48 比特&#xff08;6 字…...

Kotlin 学习-方法和参数类型

/*** kotlin 的方法有三种* */fun main() {/*** 方法一* 1.普通类的成员方法申明与调用* &#xff08;1&#xff09;需要先构建出实例对象&#xff0c;才能访问成员方法* &#xff08;2&#xff09;实例对象的构建只需要在类名后面加上()* */Person().test()/*** 方法二&#x…...

基于风力水力和蓄电池的低频率差联合发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 风力发电 4.2 风力发电 4.3 蓄电池原理 4.4 蓄电池对系统稳定性分析 5.完整工程文件 1.课题概述 基于风力水力和蓄电池的低频率差联合发电系统simulink建模与仿真。模型包括风力发电模块&#xf…...

Harmony实战之简易计算器

前言 臭宝们&#xff0c;在学会上一节的基础知识之后&#xff0c;我们来实战一下。 预备知识 我们需要用到的知识点有&#xff1a; Column组件Row组件Link装饰器button组件TextInput组件State装饰器 最终效果图 代码实现 index页面(首页) /** * program: * * descriptio…...

【Ansible自动化运维】四、ansible应用部署:加速开发到生产的流程

在软件开发的生命周期中&#xff0c;从开发到生产的应用部署过程往往是复杂且容易出错的。手动部署不仅效率低下&#xff0c;还可能引入人为错误&#xff0c;导致系统故障。Ansible 作为一款强大的自动化工具&#xff0c;能够显著简化应用部署流程&#xff0c;提高部署的准确性…...

Spring MVC 国际化机制详解(MessageSource 接口体系)

Spring MVC 国际化机制详解&#xff08;MessageSource 接口体系&#xff09; 1. 核心接口与实现类详解 接口/类名描述功能特性适用场景MessageSource核心接口&#xff0c;定义消息解析能力支持参数化消息&#xff08;如{0}占位符&#xff09;所有国际化场景的基础接口Resource…...

(十五)安卓开发中不同类型的view之间继承关系详解

在安卓开发中&#xff0c;View 是所有 UI 组件的基类&#xff0c;不同类别的 View 通过继承关系扩展和特化功能&#xff0c;以满足多样化的界面需求。以下将详细讲解常见 View 类别的继承关系&#xff0c;并结合代码示例和使用场景进行说明。 1. View 继承关系: java.lang.Obj…...

美团Leaf分布式ID生成器:雪花算法原理与应用

&#x1f4d6; 前言 在分布式系统中&#xff0c;全局唯一ID生成是保证数据一致性的核心技术之一。传统方案&#xff08;如数据库自增ID、UUID&#xff09;存在性能瓶颈或无序性问题&#xff0c;而美团开源的Leaf框架提供了高可用、高性能的分布式ID解决方案。本文重点解析Leaf…...

文件IO5(JPEG图像原理与应用)

JPEG图像原理与应用 ⦁ 基本概念 JPEG&#xff08;Joint Photographic Experts Group&#xff09;指的是联合图像专家组&#xff0c;是国际标准化组织ISO制订并于1992年发布的一种面向连续色调静止图像的压缩编码标准&#xff0c;所以也被称为JPEG标准。 同样&#xff0c;JP…...

P8682 [蓝桥杯 2019 省 B] 等差数列

题目描述 思路 让求包含这n个整数的最短等差数列&#xff0c;既让包含这几个数&#xff0c;项数最少&#xff0c;若项数最少&#xff0c;肯定不能添加小于最小的和大于最大的&#xff0c;而且让项数最小&#xff0c;公差得大 等差数列的公差aj - ai / j - i; 这又是一个等差数…...

DFS中return的作用

DFS中return的作用 在深度优先搜索(DFS)算法中&#xff0c;return语句有几个重要作用&#xff1a; 主要作用 终止当前递归分支&#xff1a;当找到解决方案或确定当前路径无效时&#xff0c;return会结束当前递归调用&#xff0c;返回到上一层。 传递结果&#xff1a;在有返回…...

Java 8 响应式编程:用函数式风格优雅地处理异步流

引言&#xff1a;响应式编程是什么&#xff1f; 响应式编程&#xff08;Reactive Programming&#xff09;是一种异步编程范式&#xff0c;它允许你以流的方式处理数据流和事件流&#xff0c;强调数据的流动与变化。通过响应式编程&#xff0c;你可以以声明式的方式构建应用&a…...

《Vue3学习手记》

下面进入Vue3的学习&#xff0c;以下代码中都有很详细的注释&#xff0c;代码也比较清晰易懂&#xff1a; Vue3 index.html是入口文件 Vue3通过createApp函数创建一个应用实例 main.ts: // Vue3中通过createApp函数创建应用实例 // 引入createApp用于创建应用 import { crea…...

批量给文件编排序号,支持数字序号及时间日期序号编排文件

当我们需要对文件进行编号的时候&#xff0c;我们可以通过这个工具来帮我们完成&#xff0c;它可以支持从 001 到 100 甚至更多的数字序号编号。也可以支持按照日期、时间等方式对文件进行编号操作。这是一种操作简单&#xff0c;处理起来也非常的高效文件编排序号的方法。 工作…...

LLM_基于OpenAI的极简RAG

一、RAG主要流程 #mermaid-svg-gXjcqQe5kyb41Yz2 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-gXjcqQe5kyb41Yz2 .error-icon{fill:#552222;}#mermaid-svg-gXjcqQe5kyb41Yz2 .error-text{fill:#552222;stroke:#55…...

Dynamics365 ExportPdfTemplateExportWordTemplate两个Action调用的body构造

这两天在用ExportPdfTemplate做pdf导出功能时&#xff0c;遇到了如下问题InnerException : Microsoft.OData.ODataException: An unexpected StartArray node was found when reading from the JSON reader. A PrimitiveValue node was expected. 我的场景是使用power automate…...

Java 程序调试与生产问题排查工具Arthas

好的&#xff0c;以下是修改后的博客内容&#xff0c;将公司信息替换为通用的占位符&#xff1a; 深入探索 Arthas&#xff1a;Java 程序调试与生产问题排查的利器 在 Java 开发中&#xff0c;调试和诊断问题往往是一个复杂且耗时的过程。Arthas&#xff08;Alibaba Java Dia…...

day26图像处理OpenCV

文章目录 一、OpenCV1.介绍2.下载3.图像的表示4.图像的基本操作4.1图片读取或创建4.1.1读取4.1.2创建 4.2创建窗口4.3显示图片4.3.1设置读取的图片4.3.2设置显示多久4.3.3释放 4.4.保存图片4.5图片切片&#xff08;剪裁&#xff09;4.6图片大小调节 5.在图像中绘值5.1绘制直线5…...

国际物流怎么找客户?选择适合自己的企业拓客平台

在国际物流行业&#xff0c;获客一直是企业发展的核心难题。无论是跨境电商、传统外贸&#xff0c;还是国际货代&#xff0c;找到精准的客户资源并高效转化&#xff0c;是决定企业能否抢占市场蓝海的关键。今天&#xff0c;我们就来聊聊如何选择一个真正适合的国际物流拓客平台…...

2025年Y1大型游乐设施修理证报考要求

Y1大型游乐设施修理证是从事大型游乐设施维修、保养的必备资质&#xff0c;由国家市场监督管理总局颁发。报考需满足以下条件&#xff1a; 1. 基本条件 年龄&#xff1a;18周岁以上&#xff0c;60周岁以下&#xff1b; 学历&#xff1a;初中及以上文化程度&#xff1b; 健康…...

第四十六篇 人力资源管理数据仓库架构设计与高阶实践

声明&#xff1a;文章内容仅供参考&#xff0c;需仔细甄别。文中技术名称属相关方商标&#xff0c;仅作技术描述&#xff1b;代码示例为交流学习用途&#xff1b;案例数据已脱敏&#xff0c;技术推荐保持中立&#xff1b;法规解读仅供参考&#xff0c;请以《网络安全法》《数据…...