新闻详情

新闻详情

首页 / 资讯中心 / 详情

Win32 GUI画图极简框架

发布时间:2026/11/16 1:11:58来源:尧图网络
Win32 GUI画图极简框架
极简测试//编译运行生成task.json后应在 // ${fileDirname}\\${fileBasenameNoExtension}.exe之后添加以下内容 // , -mwindows #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); HBRUSH red CreateSolidBrush(RGB(255,0,0)); RECT sq {50, 50, 150, 150}; // 局部变量安全取地址 FillRect(hdc, sq, red); DeleteObject(red); HBRUSH blue CreateSolidBrush(RGB(0,0,255)); SelectObject(hdc, blue); Ellipse(hdc, 200, 50, 300, 150); DeleteObject(blue); EndPaint(hwnd, ps); return 0; } case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProcW(hwnd, msg, wParam, lParam); } } int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nShow) { WNDCLASSW wc {0}; wc.lpfnWndProc WndProc; wc.hInstance hInst; wc.lpszClassName LDraw; wc.hbrBackground (HBRUSH)(COLOR_WINDOW1); RegisterClassW(wc); HWND hwnd CreateWindowExW(0, LDraw, L绘图, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, hInst, NULL); ShowWindow(hwnd, nShow); UpdateWindow(hwnd); MSG msg; while (GetMessageW(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessageW(msg); } return msg.wParam; }面向过程写法//编译运行生成task.json后应检查是否在 // ${fileDirname}\\${fileBasenameNoExtension}.exe之后添加了以下内容 // ,-lgdi32, -mwindows #include windows.h #include cstdlib // 绘图函数直接拿到窗口句柄绘图 void DrawPoint(HWND hwnd, int x, int y, COLORREF color) { HDC hdc GetDC(hwnd); SetPixel(hdc, x, y, color); ReleaseDC(hwnd, hdc); } void DrawLine(HWND hwnd, int x1, int y1, int x2, int y2, COLORREF color) { HDC hdc GetDC(hwnd); HPEN pen CreatePen(PS_SOLID, 1, color); HPEN oldPen (HPEN)SelectObject(hdc, pen); MoveToEx(hdc, x1, y1, nullptr); LineTo(hdc, x2, y2); SelectObject(hdc, oldPen); DeleteObject(pen); ReleaseDC(hwnd, hdc); } LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { return msg WM_DESTROY ? (PostQuitMessage(0), 0) : DefWindowProcA(hwnd, msg, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { //1.初始化程序 const char* className SimpleWin; WNDCLASSEXA wc{}; wc.cbSize sizeof(wc); wc.lpfnWndProc WndProc; wc.hInstance hInstance; wc.lpszClassName className; RegisterClassExA(wc); HWND hwnd CreateWindowExA(0, className, Draw Window, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, nullptr, nullptr, hInstance, nullptr ); ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); // 2. 在主函数直接调用绘图函数 srand(12); for(int i 0; i 10000; i) { int x rand() % 800; int y rand() % 600; COLORREF color RGB(rand()%256, rand()%256, rand()%256); DrawPoint(hwnd, x, y, color); } DrawLine(hwnd, 200, 200, 200, 400, RGB(0, 0, 0)); DrawLine(hwnd, 200, 400, 400, 300, RGB(255, 0, 0)); DrawLine(hwnd, 400, 300, 200, 200, RGB(0, 128, 255)); // 3. 等待5秒 DWORD startTick GetTickCount(); while (GetTickCount() - startTick 5000) { MSG msg{}; if (PeekMessageA(msg, nullptr, 0, 0, PM_REMOVE)) DispatchMessageA(msg); } DestroyWindow(hwnd); // 4. 关闭窗口 return 0; }面向对象版本//编译运行生成task.json后应检查是否在 // ${fileDirname}\\${fileBasenameNoExtension}.exe之后添加了以下内容 // ,-lgdi32, -mwindows #include windows.h #include cstdlib #include string class Paint { private: HWND hwnd; DWORD startTick; int waitTime; // 保存等待时长毫秒 std::string className; // 静态窗口过程处理基本消息 static LRESULT CALLBACK WndProcStatic(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg WM_DESTROY) { PostQuitMessage(0); return 0; } return DefWindowProcA(hwnd, msg, wParam, lParam); } // 内部辅助注册窗口类 void RegisterWindowClass(HINSTANCE hInstance) { WNDCLASSEXA wc{}; wc.cbSize sizeof(wc); wc.lpfnWndProc WndProcStatic; wc.hInstance hInstance; wc.lpszClassName className.c_str(); wc.hbrBackground (HBRUSH)(COLOR_WINDOW 1); // 添加背景刷避免闪烁 RegisterClassExA(wc); } public: // 构造函数初始化窗口 Paint(HINSTANCE hInstance, const char* titleWindow, int width800, int height600) : hwnd(nullptr), startTick(0), waitTime(0), className(OOPPaintClass) { RegisterWindowClass(hInstance); hwnd CreateWindowExA( 0, className.c_str(), title, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, width, height, nullptr, nullptr, hInstance, nullptr ); if (hwnd) { ShowWindow(hwnd, SW_SHOW); UpdateWindow(hwnd); } } // 成员函数DrawPoint void DrawPoint(int x, int y, COLORREF color) { if (!hwnd) return; HDC hdc GetDC(hwnd); SetPixel(hdc, x, y, color); ReleaseDC(hwnd, hdc); } // 成员函数DrawLine void DrawLine(int x1, int y1, int x2, int y2, COLORREF color) { if (!hwnd) return; HDC hdc GetDC(hwnd); HPEN pen CreatePen(PS_SOLID, 1, color); HPEN oldPen (HPEN)SelectObject(hdc, pen); MoveToEx(hdc, x1, y1, nullptr); LineTo(hdc, x2, y2); SelectObject(hdc, oldPen); DeleteObject(pen); ReleaseDC(hwnd, hdc); } // 成员函数Wait // 接受外部传参的延时毫秒数保存到 waitTime并记录开始时间 void Wait(int ms) { waitTime ms; startTick GetTickCount(); } // 析构函数等待指定时间后关闭窗口 ~Paint() { if (waitTime 0) { // 延时循环同时处理消息以保持窗口响应 while (GetTickCount() - startTick (DWORD)waitTime) { MSG msg{}; // 使用 PM_REMOVE 取出消息并分发防止界面无响应 if (PeekMessageA(msg, nullptr, 0, 0, PM_REMOVE)) { DispatchMessageA(msg); } } } if (hwnd) { DestroyWindow(hwnd); hwnd nullptr; } } }; int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) { Paint obj1(hInstance, Object 1: Points); srand(12); for(int i 0; i 10000; i) { int x rand() % 800; int y rand() % 600; COLORREF color RGB(rand()%256, rand()%256, rand()%256); obj1.DrawPoint(x, y, color); } Paint obj2(hInstance, Object 2: Lines); obj2.DrawLine(200, 200, 200, 400, RGB(0, 0, 0)); obj2.DrawLine(200, 400, 400, 300, RGB(255, 0, 0)); obj2.DrawLine(400, 300, 200, 200, RGB(0, 128, 255)); obj1.Wait(3000); obj2.Wait(5000); return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉