恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

第5章,[Win32 章节] :Arc、Chord 和 Pie 教学插图

  • 首页
  • 资讯中心
  • /
  • 第5章,[Win32 章节] :Arc、Chord 和 Pie 教学插图

相关资讯

C# 图像实现亚像素精度:使用OpenCvSharp实现亚像素精度的定位 2026/9/8 15:37:05
OpenCode:终端里的开源AI编程代理,灵活接入多模型实战指南 2026/9/8 15:32:05
在网络安全中,什么是ARP? 2026/9/8 15:32:04

最新资讯

手操器能通讯却不能校准?DD文件版本不匹配的排查与修复
Hugging Face Transformers 中的 Ministral:交替注意力架构解析、MinistralConfig 参数说明与文本生成实战
裸机编程不求人:开源嵌入式Skill一条龙实战指南
WandEnhancer 本地补丁如何解除 WeMod 免费时长限制?附完整使用指南
深入解析Arm Trusted Firmware:架构、安全审计与平台移植实战
反欺诈里那些抓不到的团伙,交给图神经网络:PyG GraphSAGE 交易反欺诈实战

今日推荐

Redis缓存与离线预计算在大数据处理中的实战应用
Android 12热启动闪屏排查:从冷热启动差异到官方SplashScreen避坑指南
加密资产价值投资:原理、方法与实战策略

本周热门

超人会飞不算本事:系统稳定依赖清晰规则与边界设计
超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论
基于CNN的调制信号识别:MATLAB实现时频图分类实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

第5章,[Win32 章节] :Arc、Chord 和 Pie 教学插图

发布时间:2026/9/8 15:37:05
第5章,[Win32 章节] :Arc、Chord 和 Pie 教学插图 专栏导航上一篇第5章[Win32 章节] 圆角矩形教学插图绘制程序回到目录下一篇编程数学三角函数基础01直角三角函数本专栏课件关于本专栏课件的获取方法请参考下述课节。参考课节MFC笔记本专栏课件本节前言对于本节所讲解的知识有可能你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点请你自行查阅。我呢也会提到一部分的参考课节。但是呢你不应该依赖于我的主动提及。最好呢你自己能够多去了解和查看本专栏目录。本节我们继续来做小的练习题。本节我们要完成三个教学插图的绘制。它们分别是 Arc、Chord 和 Pie 函数的教学插图的绘制。要绘制的教学虽然有三个但是本节的代码依然不难。我仍然会将本节代码放进 Gitee 课件代码仓库 里面的。一. 三个教学插图与 Arc 插图讲解在如下课节里面我们有三个教学插图。参考课节第5章[Win32 章节] 边框绘制函数六三个教学插图如下。图1Arc 函数讲解图图2Chord 函数讲解图图3Pie 函数讲解图三个教学插图我都是用 Windows 编程的方式绘制出了基本图然后用 PhotoShop 加以修饰二形成的。当然了如果你不嫌麻烦其实也完全可以纯粹用 Windows 编程的方式来将其绘制出来。三个函数的讲解图的基本图的绘制思路很像程序代码也仅有微小的差别。所以在本篇文章里我只讲解 Arc 讲解图的绘制思路和贴出它的代码。其余的两个函数的讲解图示它们的绘制代码我会贴出来而其代码逻辑由大家自行分析。首先呢我们来看一看我们的 Arc 讲解图的绘制代码的运行结果。结果如下图所示。图4Arc 讲解图示的基本图对于图4我们分三个阶段来进行绘制。第一阶段我们要绘制外接矩形、椭圆和从椭圆圆心出发的两条辅助直线。先绘制外接矩形然后绘制椭圆最后绘制两条辅助直线。由于矩形和椭圆有外接和内接的关系所以呢两者所涉及的四个坐标值都是一样的。绘制的时候我们需要创建一个画笔这个画笔应该是 PS_DASH 风格。至于其颜色我将其设置为了 RGB(255, 0, 255) 。在这一阶段我们没有创建或者获取画刷用注册窗口类的时候默认的那个白色画刷就可以了。第二阶段我们要去绘制主角用 Arc 函数来绘制蓝色的弧线。在这一阶段我们需要创建画笔画笔为 PS_SOLID、蓝色线条风格。第三阶段描三个点。这三个点实际上它们是三个椭圆。我们需要获取备用画笔 NULL_PEN也需要创建一个自定义画刷。画刷的颜色为黑色。基本上就是这些了。二. Arc 函数讲解图绘制程序/*------------------------------------------------------------ Arc 函数讲解插图 水饺编程2026 ------------------------------------------------------------*/ #include windows.h LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] TEXT(Arc_Teach); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc WndProc; wndclass.cbClsExtra 0; wndclass.cbWndExtra 0; wndclass.hInstance hInstance; wndclass.hIcon LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName NULL; wndclass.lpszClassName szAppName; if (!RegisterClass(wndclass)) { MessageBox(NULL, TEXT(注册窗口类失败), szAppName, MB_ICONERROR); return 0; } hwnd CreateWindow(szAppName, // window class name TEXT(Arc 绘图讲解图示), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; static int xLeft, xRight, yTop, yBottom; static int xStart, xEnd, yStart, yEnd; static int nRadius, nLen1; COLORREF color; HPEN hPen, hOldPen; HBRUSH hBrush, hOldBrush; switch (message) { case WM_CREATE: nLen1 70; nRadius 4; xLeft 100; xRight 600; yTop 100; yBottom 500; xStart (xLeft xRight) / 2; yStart yTop - nLen1; xEnd xLeft - nLen1; yEnd (yTop yBottom) / 2 nLen1; return 0; case WM_PAINT: hdc BeginPaint(hwnd, ps); color RGB(255, 0, 255); hPen CreatePen(PS_DASH, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Rectangle(hdc, xLeft, yTop, xRight, yBottom); Ellipse(hdc, xLeft, yTop, xRight, yBottom); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xStart, yStart); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); color RGB(0, 0, 255); hPen CreatePen(PS_SOLID, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Arc(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); hPen (HPEN)GetStockObject(NULL_PEN); hOldPen (HPEN)SelectObject(hdc, hPen); color RGB(0, 0, 0); hBrush CreateSolidBrush(color); hOldBrush (HBRUSH)SelectObject(hdc, hBrush); Ellipse(hdc, (xLeft xRight) / 2 - nRadius, (yTop yBottom) / 2 - nRadius, (xLeft xRight) / 2 nRadius, (yTop yBottom) / 2 nRadius); Ellipse(hdc, xStart - nRadius, yStart - nRadius, xStart nRadius, yStart nRadius); Ellipse(hdc, xEnd - nRadius, yEnd - nRadius, xEnd nRadius, yEnd nRadius); SelectObject(hdc, hOldPen); SelectObject(hdc, hOldBrush); DeleteObject(hBrush); EndPaint(hwnd, ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }需要注意的依然是调用 SelectObject 函数将 GDI 画笔或者画刷选入设备环境时需要在函数名的左边有相应的强制类型转换代码。还需要注意画点时画笔用的是备用画笔 NULL_PEN所以呢将画笔选出设备环境以后无需调用 DelectObject 来删除。其余的自定义画刷和画笔它们的选入选出设备环境以及选出设备环境后的删除对象的代码请大家自行分析。编译过程我就不详细写了。如果你忘了如何编译和运行程序请参考下述课节。参考课节使用 VS2010 编写 C语言程序参考课节用 VS2019 编写C语言程序运行结果就是图4 。三. Chord 讲解图绘制代码将 Arc 讲解图绘制代码中的 Arc 函数换成 Chord 函数就成了 Chord 函数讲解图的绘制代码了。代码如下。/*------------------------------------------------------------ Chord 函数讲解插图 水饺编程2026 ------------------------------------------------------------*/ #include windows.h LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] TEXT(Chord_Teach); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc WndProc; wndclass.cbClsExtra 0; wndclass.cbWndExtra 0; wndclass.hInstance hInstance; wndclass.hIcon LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName NULL; wndclass.lpszClassName szAppName; if (!RegisterClass(wndclass)) { MessageBox(NULL, TEXT(注册窗口类失败), szAppName, MB_ICONERROR); return 0; } hwnd CreateWindow(szAppName, // window class name TEXT(Chord 绘图讲解图示), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; static int xLeft, xRight, yTop, yBottom; static int xStart, xEnd, yStart, yEnd; static int nRadius, nLen1; COLORREF color; HPEN hPen, hOldPen; HBRUSH hBrush, hOldBrush; switch (message) { case WM_CREATE: nLen1 70; nRadius 4; xLeft 100; xRight 600; yTop 100; yBottom 500; xStart (xLeft xRight) / 2; yStart yTop - nLen1; xEnd xLeft - nLen1; yEnd (yTop yBottom) / 2 nLen1; return 0; case WM_PAINT: hdc BeginPaint(hwnd, ps); color RGB(255, 0, 255); hPen CreatePen(PS_DASH, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Rectangle(hdc, xLeft, yTop, xRight, yBottom); Ellipse(hdc, xLeft, yTop, xRight, yBottom); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xStart, yStart); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); color RGB(0, 0, 255); hPen CreatePen(PS_SOLID, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Chord(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); hPen (HPEN)GetStockObject(NULL_PEN); hOldPen (HPEN)SelectObject(hdc, hPen); color RGB(0, 0, 0); hBrush CreateSolidBrush(color); hOldBrush (HBRUSH)SelectObject(hdc, hBrush); Ellipse(hdc, (xLeft xRight) / 2 - nRadius, (yTop yBottom) / 2 - nRadius, (xLeft xRight) / 2 nRadius, (yTop yBottom) / 2 nRadius); Ellipse(hdc, xStart - nRadius, yStart - nRadius, xStart nRadius, yStart nRadius); Ellipse(hdc, xEnd - nRadius, yEnd - nRadius, xEnd nRadius, yEnd nRadius); SelectObject(hdc, hOldPen); SelectObject(hdc, hOldBrush); DeleteObject(hBrush); EndPaint(hwnd, ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }代码逻辑请大家自行分析。编译过程我就不详细写了。如果你忘了如何编译和运行程序请参考下述课节。参考课节使用 VS2010 编写 C语言程序参考课节用 VS2019 编写C语言程序运行结果如下。图5四. Pie 讲解图绘制代码将 Arc 讲解图绘制代码中的 Arc 函数换成 Pie 函数就成了 Pie 函数讲解图的绘制代码了。代码如下。/*------------------------------------------------------------ Pie 函数讲解插图 水饺编程2026 ------------------------------------------------------------*/ #include windows.h LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static TCHAR szAppName[] TEXT(Pie_Teach); HWND hwnd; MSG msg; WNDCLASS wndclass; wndclass.style CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc WndProc; wndclass.cbClsExtra 0; wndclass.cbWndExtra 0; wndclass.hInstance hInstance; wndclass.hIcon LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground (HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName NULL; wndclass.lpszClassName szAppName; if (!RegisterClass(wndclass)) { MessageBox(NULL, TEXT(注册窗口类失败), szAppName, MB_ICONERROR); return 0; } hwnd CreateWindow(szAppName, // window class name TEXT(Pie 绘图讲解图示), // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL); // creation parameters ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while (GetMessage(msg, NULL, 0, 0)) { TranslateMessage(msg); DispatchMessage(msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; static int xLeft, xRight, yTop, yBottom; static int xStart, xEnd, yStart, yEnd; static int nRadius, nLen1; COLORREF color; HPEN hPen, hOldPen; HBRUSH hBrush, hOldBrush; switch (message) { case WM_CREATE: nLen1 70; nRadius 4; xLeft 100; xRight 600; yTop 100; yBottom 500; xStart (xLeft xRight) / 2; yStart yTop - nLen1; xEnd xLeft - nLen1; yEnd (yTop yBottom) / 2 nLen1; return 0; case WM_PAINT: hdc BeginPaint(hwnd, ps); color RGB(255, 0, 255); hPen CreatePen(PS_DASH, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Rectangle(hdc, xLeft, yTop, xRight, yBottom); Ellipse(hdc, xLeft, yTop, xRight, yBottom); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xStart, yStart); MoveToEx(hdc, (xLeft xRight) / 2, (yTop yBottom) / 2, NULL); LineTo(hdc, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); color RGB(0, 0, 255); hPen CreatePen(PS_SOLID, 0, color); hOldPen (HPEN)SelectObject(hdc, hPen); Pie(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); SelectObject(hdc, hOldPen); DeleteObject(hPen); hPen (HPEN)GetStockObject(NULL_PEN); hOldPen (HPEN)SelectObject(hdc, hPen); color RGB(0, 0, 0); hBrush CreateSolidBrush(color); hOldBrush (HBRUSH)SelectObject(hdc, hBrush); Ellipse(hdc, (xLeft xRight) / 2 - nRadius, (yTop yBottom) / 2 - nRadius, (xLeft xRight) / 2 nRadius, (yTop yBottom) / 2 nRadius); Ellipse(hdc, xStart - nRadius, yStart - nRadius, xStart nRadius, yStart nRadius); Ellipse(hdc, xEnd - nRadius, yEnd - nRadius, xEnd nRadius, yEnd nRadius); SelectObject(hdc, hOldPen); SelectObject(hdc, hOldBrush); DeleteObject(hBrush); EndPaint(hwnd, ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }代码逻辑请大家自行分析。编译过程我就不详细写了。如果你忘了如何编译和运行程序请参考下述课节。参考课节使用 VS2010 编写 C语言程序参考课节用 VS2019 编写C语言程序运行结果如下。图6结束语本节虽说有三个程序。但是呢都不难且三个程序的思路一致仅有微小的差别而已。专栏导航上一篇第5章[Win32 章节] 圆角矩形教学插图绘制程序回到目录下一篇编程数学三角函数基础01直角三角函数

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号