第5章,[Win32 章节] :边框绘制函数(六)
专栏导航上一篇第5章[Win32 章节] 边框绘制函数五回到目录下一篇第5章[Win32 章节] 边框绘制函数的教材案例本节前言对于本节所讲解的知识有可能你会需要时不时地参考本专栏的其它文章。真的遇到了需要参考之前的文章的知识点请你自行查阅。我呢也会提到一部分的参考课节。但是呢你不应该依赖于我的主动提及。最好呢你自己能够多去了解和查看本专栏目录。想要学习本节请先确认你已经学完并基本掌握了以下的几个参考课节的内容。参考课节第5章[Win32 章节] 边框绘制函数一参考课节第5章[Win32 章节] 边框绘制函数二参考课节第5章[Win32 章节] 边框绘制函数三参考课节第5章[Win32 章节] 边框绘制函数四参考课节第5章[Win32 章节] 边框绘制函数五本节我们一口气来讲解三个函数它们分别是 Arc、Chord 和 Pie 函数。其中Arc 函数绘制的是弧线Chord 绘制的是弓形。Pie 绘制的图是饼形图或者我们也可以将其称作扇形图。我们开始。一. 函数讲解首先呢我们来展示三个讲解示意图。图1Arc 函数讲解图图2Chord 函数降解图图3Pie 函数讲解图使用 Arc 函数绘制的图形如图1 的红线部分所示它就是一条弧线。这个弧线它是椭圆圆周上的一段曲线。使用 Chord 函数绘制的图形如图2 的红线部分所示。它在弧线的基础上连接弧线的两端点而形成一个封闭图形弓形。使用 Pie 函数绘制的图形如图3 的红线部分所示。它是在弧线的基础上由椭圆圆心分别连接弧线的两端点形成一个封闭图形。我们将这个封闭图形称作饼形或者扇形。接下来呢我们来展示三个函数的使用方法。Arc (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);Chord (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);Pie (hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd);可以看到三个函数使用相同的参数。三个函数的前五个参数与 Rectangle 和 Ellipse 函数相同。我们还是来重复一下这五个参数的含义。首先呢hdc 是设备环境句柄。接下来是 hdc 参数之后的四个参数它的含义与 Rectangle 和 Ellipse 函数相同。不过呢对于本节的三个函数我们还得来讲解一下这四个坐标参数的特殊含义。Arc、Chord 和 Pie 函数所绘制出来的图形它们都拥有一段弧线这个弧线它是椭圆圆周上的一部分曲线。弧线所在的椭圆的外接矩形便是 hdc 之后的四个坐标参数所描述的矩形了。这个外接矩形的概念请大家关注一下。我们将这四个坐标参数单提出来它们是xLeft, yTop, xRight, yBottom。我们若以客户区内部的最左侧的一列像素为 0 列像素则再往右一列是 1 号列像素再往右一列是 2 号列像素等等。在这种规定之下则 xLeft 是弧线所在的椭圆圆周的外接矩形的左边的起始像素的列号xRight 是弧线所在的椭圆圆周的外接矩形的右边的结束像素的右边一列像素的列号。也就是弧线所在的椭圆圆周的外接矩形的 x 坐标的范围是 xLeft x (xRight - 1)xRight 是弧线所在的椭圆圆周的外接矩形达不到的像素列号。讲完了xLeft 和 xRight我们再来看一看 yTop 和 yBottom 。我们若以客户区内部最上边的一行像素为 0 行像素则此行像素再往下一行为 1 号行像素再往下一行为 2 号行像素等等。在这种规定之下则 yTop 是弧线所在的椭圆圆周的外接矩形的上边的起始像素的行号而 yBottom 是弧线所在的椭圆圆周的外接矩形的下边的结束像素的下一行像素的行号。也就是弧线所在的椭圆圆周的外接矩形的 y 坐标的范围是 yTop y (yBottom - 1)yBottom 是弧线所在的椭圆圆周的外接矩形达不到的像素行号。稍微有点绕嘴。但是慢点看多看看应该还能看懂吧到了这里呢hdc 之后的前四个坐标我们就讲完了。我们再来讲最后四个坐标参数xStart, yStart, xEnd, yEnd。它们用来定义弧线的起点与终点。如何定义的呢Arc、Chord 和 Pie 函数绘制的图形都包含一段弧线这个弧线是椭圆圆周上的一段曲线。我们将这几个函数图形所在的椭圆给提取出来。我们将其称作概念椭圆吧。Windows 使用一条虚构的线来连接xStart, yStart和概念椭圆的圆心这条虚构的线与概念椭圆的交点为弧线的起点。Windows 使用另一条虚构的线来连接xEnd, yEnd和概念椭圆的圆心这条虚构的线与概念椭圆的交点为弧线的终点。从弧线的起点开始逆时针绘制曲线绘制到弧线的终点则起点与终点之间的弧线就是 Arc、Chord 和 Pie 函数绘制的图形中的弧线部分。这种绘制方法似乎有些奇怪。为啥不是指定起始椭圆圆周的起始与结束角度或者是起始与结束弧度呢再或者也可以由程序员来直接指定起点与终点啊。如果是由程序员直接来指定起点与终点的话那就需要由程序员来亲自计算弧线的起点与终点坐标了。Windows 不希望程序员亲自来进行这种精确的计算而是用一种更为简单直观的计算方法。至于说弧度和角度如果是这么来指定也会涉及浮点数了。Windows 还是希望程序员所使用的参数尽量地都是整型数而不要使用复杂的浮点数。在以后学习计算字体等等的章节内容的时候我们也会发现Windows 依然是倾向于让我们指定整型数而不是指定浮点数作为参数。还有一点是很重要的。Arc 函数绘制出来的仅仅是一个弧线它不存在封闭图形所以不涉及采用当前画刷来填充封闭图形内部区域的问题。而 Chord 和 Pie 函数它们所绘制出来的图形都是封闭图形。除了外侧的边框曲线之外还有内部的封闭区域。Windows 在绘制它们的时候会采用当前画刷来填充其内部封闭区域。当前画刷大家还记得吗我们在第三章有讲过就是窗口类变量 wndclass 中的 hbrBackground 成员变量所加载的画刷句柄它被用来绘制客户区的背景填充色。到了这里我想本节的三个函数我们就算是讲完了。在下一分节我们来给出一个简单的示例程序。二. 本节程序示例代码如下。/*------------------------------------------------------------ HELLOWIN.C -- 在窗口客户区显示 Hello, Windows Program 改编自佩措尔德的 HelloWin 程序 ------------------------------------------------------------*/ #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_Chord_Pie_Lx); 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(The Arc_Chord_Pie_Lx Program), // 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; int xLeft, xRight, yTop, yBottom; int xStart, yStart, xEnd, yEnd; switch (message) { case WM_PAINT: hdc BeginPaint(hwnd, ps); xLeft 100; xRight 300; yTop 100; yBottom 260; xStart (xLeft xRight) / 2; yStart yTop - 30; xEnd xLeft - 30; yEnd yBottom - 30; Arc(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); xLeft 300; xRight 300; xStart (xLeft xRight) / 2; yStart yTop - 30; xEnd xLeft - 30; yEnd yBottom - 30; Chord(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); yTop 300; yBottom 300; xStart (xLeft xRight) / 2; yStart yTop - 30; xEnd xLeft - 30; yEnd yBottom - 30; Pie(hdc, xLeft, yTop, xRight, yBottom, xStart, yStart, xEnd, yEnd); EndPaint(hwnd, ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, message, wParam, lParam); }程序应该是不难看懂的。编译过程我就不详细写了。如果你忘了如何编译和运行程序请参考下述课节。参考课节使用 VS2010 编写 C语言程序参考课节用 VS2019 编写C语言程序程序的运行结果如下。图4结束语本节课程到这里就结束了。专栏导航上一篇第5章[Win32 章节] 边框绘制函数五回到目录下一篇第5章[Win32 章节] 边框绘制函数的教材案例

相关新闻

2023美赛全解析:从选题策略到建模实战,助你高效备战数学建模竞赛

2023美赛全解析:从选题策略到建模实战,助你高效备战数学建模竞赛

1. 项目概述:一次高强度竞赛的全局复盘每年一月底到二月初,全球数万支大学生队伍都会经历一场为期四天、几乎不眠不休的头脑风暴——美国大学生数学建模竞赛。作为一项历史悠久的国际性赛事,它早已超越了单纯的数学解题范畴,演变为…

2026/8/23 6:50:34 阅读更多 →
校园智能安防与清洁机器人:高校无人化管理方案

校园智能安防与清洁机器人:高校无人化管理方案

高校校园普遍存在面积大、开放时段多、夜间巡查弱、公共保洁频次高的问题。以一所建筑面积60万平方米、日均师生流动5万人次的高校为例,安保巡查需覆盖教学楼、实验楼、宿舍区、地下车库与周界,公共保洁区域通常达到30万平方米。 本文核心问题&#xff…

2026/8/23 6:50:34 阅读更多 →
基于Spring Boot的实验室设备管理系统(源码+lw+部署文档+讲解等)

基于Spring Boot的实验室设备管理系统(源码+lw+部署文档+讲解等)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/23 6:50:34 阅读更多 →

最新新闻

掌握4个AI技巧,快速写出有说服力的论文引言!

掌握4个AI技巧,快速写出有说服力的论文引言!

各位同仁好,我是七哥。一个在高校里从事人工智能 相关领域研究,钻研用大模型AI实操的学术人。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。 论文引言是读者进入论文的第一道门,也是编辑和审稿人判断文章价值…

2026/8/23 7:40:49 阅读更多 →
从大唐杯获奖名单看5G-A/6G人才趋势与竞赛备赛指南

从大唐杯获奖名单看5G-A/6G人才趋势与竞赛备赛指南

1. 项目概述:从一份名单看通信行业的人才风向标最近,第九届“大唐杯”全国大学生移动通信5G技术大赛的国赛获奖名单正式公布了。这份名单,对于通信圈内人,尤其是高校师生和行业HR来说,绝不仅仅是一张光荣榜。它更像是一…

2026/8/23 7:40:49 阅读更多 →
基于 LangChain 的多 Agent 测试对话机器人:从测试领域知识到完整实现

基于 LangChain 的多 Agent 测试对话机器人:从测试领域知识到完整实现

摘要:如何让 AI 不只是"生成测试用例",而是像一个资深测试工程师一样思考——理解需求的业务闭环、枚举权限/组合/跨模块等复杂场景、在关键节点向用户确认疑问?本文构建了一个 8 Agent 对话式测试机器人,深度融合测试领域知识(需求理解六维度、测试点提炼十维度…

2026/8/23 7:40:49 阅读更多 →
Dify本地部署实战:零代码构建RAG知识库与AI智能体

Dify本地部署实战:零代码构建RAG知识库与AI智能体

这次我们来看一个能让你在本地搭建 AI 应用开发平台的项目:Dify。它不是单一模型,而是一个开源的 LLM 应用开发框架,核心是让你能用拖拽的方式,像搭积木一样构建 AI 智能体(Agent)和 RAG(检索增…

2026/8/23 7:40:49 阅读更多 →
[RHEL] How to allow cron to run if user password is expired

[RHEL] How to allow cron to run if user password is expired

환경 Red Hat Enterprise Linux 5Red Hat Enterprise Linux 6 문제 The cron job wasnt executed successfully, and got these messages: Raw Jul 10 00:31:01 hostname1 crond[2860]: CRON (xxx) ERROR: failed to open PAM security session: Success Jul 10 00:31:01 ho…

2026/8/23 7:40:49 阅读更多 →
华为ENSP网络仿真工具安装与排错全指南:从VLAN实验到替代方案

华为ENSP网络仿真工具安装与排错全指南:从VLAN实验到替代方案

1. 先搞清楚 ENSP 到底是什么,以及它现在还能不能用如果你正在准备网络工程师认证,或者需要模拟华为网络设备来做实验,那你大概率绕不开 ENSP 这个名字。ENSP,全称是 Enterprise Network Simulation Platform,是华为官…

2026/8/23 7:39:49 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/22 18:08:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/22 7:31:03 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →