MFC图形函数学习08——绘图函数的重载介绍

news2024/11/14 6:09:22

        在《MFC图形函数学习06——画椭圆弧线函数》中介绍了CPoint类、POINT结构体;在《MFC图形函数学习07——画扇形函数》中介绍了CRect类、RECT结构体。在介绍完后,没有介绍它们怎样使用。实际上,这些类和结构体对象或指针也是我们学习过的绘图函数的参数类型,与使用(x,y)坐标做参数对照,构成了这些绘图函数的重载形式。由于这些函数已经学习过,这里仅做简要介绍。
一、绘制像素点函数的重载形式
       原型:a.COLORREF SetPixel( POINT point,COLORREF crColor);
                  b.BOOL SetPixelV(POINT point,COLORREF crColor);
       参数:点结构体POINT对象,此处也可以使用CPoint类对象
       返回值:a.返回使用的颜色值,类型为COLORREF
                     b.绘制成功返回非0数,失败返回0
       说明:a、b函数均为CDC类的成员函数,需要CDC类指针调用。
二、绘制直线段函数的重载
       原型:CPoint MoveTo(POINT point);
       参数:点结构体POINT对象(也可使用CPoint类对象)
       返回值:返回移动前的位置,需用CPoint类对象接收
       原型:BOOL LineTo(POINT point);
       参数:点结构体POINT对象(也可使用CPoint类对象)
       返回值:BOOL类型,画线成功返回非0数,失败返回0
       说明:MoveTo、LineTo两个函数均属于CDC类的成员函数,使用时需要CDC对象或指针调用。
三、绘制矩形函数的重载
       原型:BOOL Rectangle(LPCRECT lpRect);
       参数:LPCRECT类型的指向矩形类CRect对象的指针(也可使用LPRECT类型结构体指针)
       返回值:BOOL类型,绘制矩形成功返回非0数,失败返回0
       说明:Rectangle是CDC类的成员函数,使用时需要CDC对象或指针调用。
四、绘制椭圆函数
       原型:BOOL Ellipse (LPCRECT lpRect);
       参数:LPCRECT类型的指向矩形类CRect对象的指针(也可使用LPRECT类型结构体指针)
       返回值:BOOL类型,椭圆绘制成功返回非0数,失败返回0
       说明:Ellipse函数是CDC类的成员函数,使用时需要CDC对象或指针调用
五、绘制椭圆弧函数
       原型:BOOL Arc(LPCRECT lpRect,POINT ptStart,POINT ptEnd);
       参数:
          参1 LPCRECT lpRect指向内切矩形的指针(使用LPRECT指针也可)
          参2 POINT ptStart 弧线起点点结构体对象(也可使用CPoint类对象)
          参3 POINT ptEnd 弧线终点点结构体对象(同上)
       返回值:BOOL类型,弧线绘制成功返回非0数,失败返回0
       说明:Arc函数是CDC类的成员函数,使用时需要CDC对象或指针调用
六、绘制扇形函数
       原型:BOOL Pie(LPCRECT lpRect,POINT ptStart,POINT ptEnd);
       参数:同椭圆弧函数
       返回值:BOOL类型,弧线绘制成功返回非0数,失败返回0
       说明:Arc函数是CDC类的成员函数,使用时需要CDC对象或指针调用。 
七、使用上述重载函数绘制图形程序举例
       题目:在自定义坐标系中,(1)在原点半径25像素内使用SetPixelV绘制红色填充圆;(2)将填充色定义为透明,以窗口宽度、高度的75%绘制矩形、矩形的内切椭圆,线型为实线、2像素宽、红色;(3)将线的颜色调整为蓝色,线宽调整为4像素,将第一象限的椭圆绘制成蓝色椭圆弧;(4)按绘制弧线要求,将第三象限的椭圆绘制成扇形,填充色仍为透明。
      代码(放到OnDraw函数中可运行)如下:

//一、自定义坐标系
	CRect rect;
	GetClientRect(rect);
	pDC->SetMapMode(MM_ANISOTROPIC); 
	pDC->SetWindowExt(rect.Width(), rect.Height()); 
	pDC->SetViewportExt(rect.Width(), -rect.Height()); 
	pDC->SetViewportOrg(rect.Width() / 2, rect.Height() / 2);
	rect.OffsetRect(-rect.Width() / 2, -rect.Height() / 2);
//二、在原点半径25像素内使用SetPixelV绘制红色填充圆
	CPoint point(-25,-25); //声明CPoint对象
	for (int i = -25; i <= +25; i++) {
		for (int j = -25; j <= +25; j++) {
			point.x = i;
			point.y = j;
			if (point.x * point.x + point.y * point.y < 625) {
				pDC->SetPixelV(point, 0x0000ff);
			}
		}
	}
//三、绘制矩形及矩形的内切椭圆
	CPen redPen;
	redPen.CreatePen(PS_SOLID, 2, 0x0000ff);
	CPen* oldPen = pDC->SelectObject(&redPen);
	CBrush* oldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
	RECT myRect;
	myRect.left = -rect.Width() * 0.75 / 2;
	myRect.top = rect.Height() * 0.75 / 2;
	myRect.right = rect.Width() * 0.75 / 2;
	myRect.bottom = -rect.Height() * 0.75 / 2;
	LPRECT lpRect = &myRect;
	pDC->Rectangle(lpRect);
	pDC->Ellipse(lpRect);
	pDC->SelectObject(oldPen);
	oldPen->DeleteObject();
//四、将椭圆在第一象限部分绘制成蓝色椭圆弧
	CPen bluePen(PS_SOLID, 4, 0xff0000);
	oldPen = pDC->SelectObject(&bluePen);
	POINT start,end;
	start.x = myRect.right;
	start.y = 0;
	end.x = 0;
	end.y = myRect.top;
	pDC->Arc(lpRect, start, end);
//五、在第三象限绘制无填充蓝色扇形
	start.x = myRect.left;
	start.y = 0;
	end.x = 0;
	end.y = myRect.bottom;
	pDC->Pie(lpRect, start, end);
    pDC->SelectObject(oldBrush);
	pDC->SelectObject(oldPen);
//说明:当填充色选择透明时,前后绘制的图形不会被覆盖,都可以看到。

程序运行结果截图:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239973.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识

本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …

Flink执行sql时报错

[ERROR] Could not execute SQL statement. Reason: java.lang.ClassNotFoundException: org.apache.flink.table.planner.delegation.ParserFactory flink-1.15.4的lib里面存在flink-sql-connector-hive-3.1.2_2.12-1.15.4.jar时&#xff0c;似乎会跟hdfs产生冲突&#xff0c…

实现API接口的自动化

API接口自动化测试的最佳实践有哪些&#xff1f; API接口自动化测试的最佳实践包括以下几个方面&#xff1a; 确定测试范围和目标&#xff1a;明确需要测试的API接口和功能点&#xff0c;确定测试的目标和预期结果 编写测试用例&#xff1a;根据API文档和需求&#xff0c;编…

uni-app中使用 unicloud 云开发平台③

文章目录 六、hbuilderX 中使用 unicloud 云开发平台文档传统业务开发流程什么是 unicloudunicloud 优点开发流程uncloud 构成云数据库云存储及 CDN创建云函数工程七、unicloud api 操作云函数调用云函数实现云数据库基本增删改查1. 获取数据库引用云存储操作六、hbuilderX 中使…

【缓存策略】你知道 Refresh-ahead(预刷新)这个缓存策略吗?

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ Java 中级 🙉八股文专题:剑指大厂,手撕 J…

零基础Java第十六期:抽象类接口(二)

目录 一、接口&#xff08;补&#xff09; 1.1. 数组对象排序 1.2. 克隆接口 1.3. 浅拷贝和深拷贝 1.4. 抽象类和接口的区别 一、接口&#xff08;补&#xff09; 1.1. 数组对象排序 我们在讲一维数组的时候&#xff0c;使用到冒泡排序来对数组里的元素进行从小到大或从大…

django入门【05】模型介绍(二)——字段选项

文章目录 1、null 和 blank示例说明⭐ null 和 blank 结合使用的几种情况总结&#xff1a; 2、choices**choices 在 Django 中有以下几种形式&#xff1a;**&#xff08;1&#xff09; **简单的列表或元组形式**&#xff08;2&#xff09; **字典映射形式**&#xff08;3&#…

数据量大Excel卡顿严重?选对报表工具提高10倍效率

当几万行的数据把软件频频跑崩&#xff0c;当珍贵的数据资源无法便捷复用&#xff0c;当数据填报的本地文档在各个电脑中传来传去……在各大岗位要求中频频出现的Excel&#xff0c;作为个人办公软件绝无仅有&#xff0c;但作为企业场景下的报表工具&#xff0c;效率显然不足。 …

如何用WordPress和Shopify提升SEO表现?

选择合适的建站程序对于SEO优化非常重要。目前&#xff0c;WordPress和Shopify是两种备受推崇的建站平台&#xff0c;各有优势。 WordPress最大的优点是灵活性。它支持大量SEO插件&#xff0c;帮助你调整元标签、生成站点地图、优化内容结构等。这些功能让你能够轻松地提升网站…

vue 计算属性get set

<template><div id"app"><h1>用户信息</h1><p>全名&#xff1a;{{ fullName }}</p><input v-model"fullName" placeholder"请输入全名" /><p>姓&#xff1a;{{ firstName }}</p><p>…

PHP搭建开发环境(Windows系统)

要搭建一个完整的PHP动态网站&#xff0c;离不开操作系统、Web服务器、数据库、和PHP软件。 虽然有不错方便的方式&#xff0c;比如使用phpstudio等等等等许多面板都是非常快速不错的方式&#xff0c;但是这里是教会大家如何配置而不只是依赖别人整合好的面板软件&#xff0c;…

7.2 图像复原之空间滤波

图像复原&#xff08;只存在噪声的复原&#xff09;之空间滤波 文章目录 图像复原&#xff08;只存在噪声的复原&#xff09;之空间滤波前言1. 均值滤波器1.1 算术平均滤波器1.2 几何均值滤波器1.3 谐波平均滤波器1.4 反谐波平均滤波器 总结 前言 当一幅图像仅被加性噪声退化时…

化工防爆巡检机器人:在挑战中成长,为化工安全保驾护航

随着全球能源需求的不断攀升&#xff0c;化工行业的安全性与高效性愈发受到关注。化工设施规模巨大&#xff0c;而且其中多数存在高风险因素&#xff0c;像是易燃易爆化学物质、高温环境、有毒有害物质以及高压设备等。仅2023年&#xff0c;国内危化品事故就多达652起&#xff…

【数字图像处理+MATLAB】对图片进行伽马校正(Gamma Correction):使用幂律变换公式进行伽马变换

引言 伽马校正&#xff08;Gamma Correction&#xff09;是一种用于图像处理的技术&#xff0c;主要用于调整图像的亮度或对比度。其基本原理是对图像的每一个像素应用一个非线性变换&#xff0c;以更好地适应人眼的视觉感知。在数字图像处理中&#xff0c;伽马校正通常用于调…

scala 迭代更新

在Scala中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合&#xff08;如数组、列表、集合等&#xff09;的元素而不暴露其底层表示的对象。迭代器提供了一种统一的方法来访问集合中的元素&#xff0c;而无需关心集合的具体实现。 在Scala中&#xff0c…

部署zabbix遇到问题: cannot find a valid baseurl for repo:centos-sclo-rh/x86 64 怎么解决 ?

安装 Zabbix 前端包&#xff0c;提示cannot find a valid baseurl for repo&#xff1a;centos-sclo-rh/x86 64 安装zabbix前端包 # yum install zabbix-web-mysql-scl zabbix-apache-conf-scl 解决办法&#xff1a; 原因是&#xff1a;CentOS7的SCL源在2024年6月30日停止维护…

SpringBoot(十九)创建多模块Springboot项目(完整版)

之前我有记录过一次SpringBoot多模块项目的搭建,但是那一次只是做了一个小小的测试。只是把各模块联通之后就结束了。 最近要增加业务开发,要将目前的单模块项目改成多模块项目,我就参照了一下我上次搭建的流程,发现总是有报错。上次搭建的比较顺利,很多细枝末节也没有仔细…

基于Python的智能无人超市管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

什么是量化交易

课程大纲 内容初级初识量化&#xff0c;理解量化 初识量化 传统量化和AI量化的区别 量化思想挖掘 量化思想的挖掘及积累技巧 量化代码基础&#xff1a; python、pandas、SQL基础语法 金融数据分析 常用金融分析方式 常用因子分析方式 数据分析实战练习 回测及交易引擎 交易引擎…

xcode-select: error: tool ‘xcodebuild‘ requires Xcode, but active developer

打开 .sh 文件所在的终端窗口&#xff0c;执行终端命令&#xff1a;sh 文件名.sh&#xff0c;出现如下错误&#xff1a; 解决办法&#xff1a;