MFC图形函数学习04——画矩形函数

       MFC中绘制矩形函数是MFC的基本绘图函数,它的大小和位置由左上角和右下角的坐标决定;若想绘制的矩形边框线型、线宽、颜色以及填充颜色都还需要其它函数的配合。
一、绘制矩形函数
       原型:BOOL Rectangle(int x1,int y1,int x2,int y2);
       参数:x1,y1矩形左上角坐标,x2,y2矩形右下角坐标
       返回值:矩形绘制成功返回非0数,失败返回0
      说明:
      a.Rectangle函数是CDC类的成员函数,需要CDC类对象或指针调用。
      b.绘制的矩形不包括右边界和下边界,它的宽度为x2-x1,高度y2-y1
      c.与绘制直线函数相似,直接使用绘制矩形函数画矩形也是按照缺省设置绘制的;画出的矩形边框为1个像素宽的黑色实线、内部填充为白色(与矩形外相同)。
     d.绘制的矩形内部如不是透明的,原位置上的已有图形会被覆盖。
二、矩形边框线宽、线型、颜色使用CPen设置,同画线中的介绍,不再重复);下面介绍填充颜色的设置
  (1)生成实体画刷(可以这样理解:画笔是画线的,画刷是画面的)
       原型:BOOL CreateSolidBrush(COLORREF color);
       参数:COLORREF类型的颜色值
       返回值:成功返回非0数值,失败返回0
       说明:
       a.CreateSolidBrush是CBrush类的成员函数,因此需要CBrush对象或指针调用。
       b.画刷颜色为均匀颜色的单一颜色。
       c.这里再介绍一种COLORREF类型颜色值的写法,直接使用6位十六进制值表示RGB颜色值,不过颜色值的排列顺序是B、G、R且必须是16进制数。举例:0x00bbff,其中00代表blue分量,bb代表green分量,ff代表红色分量。
       d.由CBrush对象调用CreateSolidBrush()生成的实体画刷类似于CPen生成的画笔,都需要使用CDC类的成员函数SelectObject()将画笔选入CDC对象中;同样的,也需要接收作为SelectObject()返回值的缺省画刷,待自定义画刷使用完毕后恢复。
       e.画刷如需重定义,重定义前应先调用其成员函数DeleteObject()进行清理。
   (2)生成带花纹画刷
       原型:BOOL CreateHatchBrush(int nIndex,COLOREF color);
       参数:参1 花纹形式值 参2 颜色
       返回值:成功返回非0数值,失败返回0
       a.参1 的取值
        HS_BDIAGONAL:为左高右低的45度斜花纹。
        HS_CROSS:为由水平线和垂直线构成的方格花纹。
        HS_DIAGCROSS:为斜45度方格花纹。
        HS_FIDAGONAL:为右高左低的45度斜花纹。
        HS_HORIZONTAL:为水平线花纹。
        HS_VERTICAL:为垂直线花纹。
      b.画刷使用方法、颜色的使用同(1)。
三、绘制矩形案例程序
       要求:在自定义坐标系四个象限内以象限中心为中心,分别以窗口高度的1/4为高、窗口宽度的1/4为宽画出四个矩形。第一象限的矩形边框线型、颜色、矩形填充色均为缺省。第二象矩形限边框线型为红色实线、线宽3、矩形填充蓝色45度斜花纹。第三象限矩形边框线型为绿色虚线、线宽1、矩形填充黄色。第四象限矩形边框、填充均为蓝色。
       代码及注释如下:(若需运行代码可拷贝到OnDraw函数中)

//一、自定义坐标系CRect rect;//这是一个关于视图窗口数据的类,这里定义一个CRect类对象GetClientRect(rect);//GetClientRect得到的是相对于窗口客户区左上角的坐标。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);//将rect的值重置
//二、各个矩形宽、高int w = rect.Width() / 4, h = rect.Height() / 4;
//三、使用缺省设置在第一象限绘制矩形int Q1CenterX = rect.Width() / 2 / 2; //第一象限中心点坐标int Q1CenterY = rect.Height() / 2 / 2;int x1 = Q1CenterX - w / 2; //第一象限矩形左上角坐标int y1 = Q1CenterY + h / 2;int x2 = Q1CenterX + w / 2; //第一象限矩形右下角坐标int y2 = Q1CenterY - h / 2;pDC->Rectangle(x1,y1,x2,y2); //画出第一象限矩形
//四、在第二象线绘制边框线型为实线、线宽3、颜色红、矩形填充蓝色45度写花纹的矩形CPen redPen(PS_SOLID,3,0x0000FF); //调用CPen构造函数<另一种方法>生成红色画笔CPen* oldPen=pDC->SelectObject(&redPen); //将画笔选入CDC并保存缺省画笔CBrush blueBrush;blueBrush.CreateHatchBrush(HS_BDIAGONAL,0xff0000);//生成蓝色带斜纹画刷CBrush* oldBrush = pDC->SelectObject(&blueBrush);int Q2CenterX = -rect.Width() / 2 / 2; //第二象限中心点坐标int Q2CenterY = rect.Height() / 2 / 2;x1 = Q2CenterX - w / 2; //第二象限矩形左上角坐标y1 = Q2CenterY + h / 2;x2 = Q2CenterX + w / 2; //第二象限矩形右下角坐标y2 = Q2CenterY - h / 2;pDC->Rectangle(x1, y1, x2, y2); //画出第二象限矩形pDC->SelectObject(oldPen);//恢复缺省画笔pDC->SelectObject(oldBrush);//恢复缺省画刷
//五、在第三象限绘制边框线型为虚线、线宽1、颜色黄、矩形填充色为绿色的矩形CPen greenPen;greenPen.CreatePen(PS_DASH, 1, RGB(0, 255, 0)); //生成绿色画笔//很多软件如“画图”都可找到颜色的RGB值,网上也可搜到pDC->SelectObject(&greenPen); //将绿色画笔选入CDCCBrush yellowBrush(0x00ffff); //生成黄色画刷pDC->SelectObject(&yellowBrush); //将黄色画刷选入CDCint Q3CenterX = -rect.Width() / 2 / 2; //第三象限中心点坐标int Q3CenterY = -rect.Height() / 2 / 2;x1 = Q3CenterX - w / 2; //第三象限矩形左上角坐标y1 = Q3CenterY + h / 2;x2 = Q3CenterX + w / 2; //第三象限矩形右下角坐标y2 = Q3CenterY - h / 2;pDC->Rectangle(x1, y1, x2, y2); //画出第三象限矩形pDC->SelectObject(oldPen);//恢复缺省画笔pDC->SelectObject(oldBrush);//恢复缺省画刷
//六、在第四象限绘制边框、填充均为蓝色的矩形CPen bluePen(PS_SOLID, 1, RGB(0, 0, 255));pDC->SelectObject(bluePen);blueBrush.DeleteObject(); //复用蓝色画刷前先进行清除blueBrush.CreateSolidBrush(0xff0000);//重定义蓝色实体画刷pDC->SelectObject(&blueBrush);//选入蓝色实体画刷int Q4CenterX = rect.Width() / 2 / 2; //第四象限中心点坐标int Q4CenterY = -rect.Height() / 2 / 2;x1 = Q4CenterX - w / 2; //第四象限矩形左上角坐标y1 = Q4CenterY + h / 2;x2 = Q4CenterX + w / 2; //第四象限矩形右下角坐标y2 = Q4CenterY - h / 2;pDC->Rectangle(x1, y1, x2, y2); //画出第四象限矩形pDC->SelectObject(oldPen);//恢复缺省画笔pDC->SelectObject(oldBrush);//恢复缺省画刷

运行结果:

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

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

相关文章

openGauss数据库-头歌实验1-5 修改数据库

一、查看表结构与修改表名 &#xff08;一&#xff09;任务描述 本关任务&#xff1a;修改表名&#xff0c;并能顺利查询到修改后表的结构。 &#xff08;二&#xff09;相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 1.如何查看表的结构&#xff1b; 2.如…

树莓派5实时时钟(RTC)

树莓派5板载一个实时时钟模块。它可以通过 USB-C 电源插口右侧板上的 J5(BAT) 插口进行电池供电。如果没有互联网连接来通过 NTP 获取时间&#xff0c;RTC 可能会很有用。 可以设置唤醒警报&#xff0c;将树莓派5切换到非常低功耗的状态&#xff08;大约3mA&#xff09;。当到达…

分段线性回归

5. 分段线性回归 (Piecewise Linear Regression) 分段线性回归是一种简单的方式&#xff0c;尤其当数据的弧度变化不大但有多个不同趋势段时。可以将数据分为多个区间&#xff0c;每个区间内拟合一条直线。最终的模型是这些直线的组合。 优点&#xff1a;模型简单、易解释&am…

Git下载-连接码云-保姆级教学(连接Gitee失败的解决)

Git介绍 码云连接 一、Git介绍 二、Git的工作机制 下载链接&#xff1a;Git - 下载软件包 三、使用步骤 创建一个wss的文件夹&#xff0c;作为‘工作空间’ 四、连接码云账号 五、连接Gitee失败的解决方法 一、Git介绍 Git是一个免费的、开源的分布式版本控制…

网络工程师的瑞士军刀:深度解析20+常用工具

文章目录 网络工程师的瑞士军刀&#xff1a;深度解析20常用工具一、网络诊断与分析工具1.1 Wireshark1.2 Tcpdump1.3 Ping工具1.4 Tracert&#xff08;Windows&#xff09;/Traceroute&#xff08;Linux&#xff09;1.5 Nslookup 二、网络管理工具2.1 SNMP&#xff08;Simple N…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-30目录1. Step Guided Reasoning: Improving Mathematical Reasoning using Guidance Generation and Step Reasoning摘要研究背…

【再谈设计模式】原型模式~复制的魔法师

一、引言 在软件工程、软件开发中&#xff0c;创建对象的过程常常涉及复杂的初始化和配置。在某些情况下&#xff0c;直接复制现有对象比从头开始创建新对象更为高效。原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;允许我们通过复制现有…

【运动的&足球】足球运动员球守门员裁判检测系统源码&数据集全套:改进yolo11-DBBNCSPELAN

改进yolo11-FocalModulation等200全套创新点大全&#xff1a;足球运动员球守门员裁判检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示…

yocto中一些主要可被改写的函数

以下是 Yocto 中一些主要的可被改写的函数&#xff1a; 1. 源代码获取与准备阶段 do_fetch&#xff1a;从指定位置获取源代码。可用于自定义获取源代码的方式、处理认证或对获取的源进行预处理。do_unpack&#xff1a;解压获取到的源代码包。如果解压格式特殊或解压后需额外处…

React 组件生命周期与 Hooks 简明指南

文章目录 一、类组件的生命周期方法1. 挂载阶段2. 更新阶段3. 卸载阶段 二、函数组件中的 Hooks1. useState2. useEffect3. useContext4. useReducer 结论 好的&#xff0c;我们来详细讲解一下 React 类组件的生命周期方法和函数组件中的钩子&#xff08;hooks&#xff09;。 …

数据库连接池实现

目录 前提&#xff1a;如果我要操作多个表&#xff0c;那么就会产生冗余的JDBC步骤&#xff0c;另一个弊端就是每次都需要数据库连接对象&#xff08;Connection&#xff09;&#xff0c;获取效率低下&#xff0c;每次使用时都需要先进行连接 数据库连接池的特点&#xff1a; …

软件测试基础三(前端知识)

前端基础 1. HTML&#xff08;超文本标记语言&#xff09; 1.1. 基本概念 定义&#xff1a;HTML 是用来描述网页的一种语言&#xff0c;指的是超文本标记语言&#xff08;Hyper Text Markup Language&#xff09;。它不是编程语言&#xff0c;而是一种标记语言&#xff0c;由…

优化用于传感应用的衬底集成波导技术

ANSYS HFSS 是一款功能强大的电磁仿真软件&#xff0c;支持为微流体生物传感器应用设计和分析衬底集成波导 &#xff08;SIW&#xff09; 技术。它为快速设计优化、材料选择、系统集成和虚拟原型制作提供了一个强大的平台。借助 ANSYS HFSS&#xff0c;研究人员和工程师可以高效…

Linux 开机自动挂载硬盘

在日常使用 Linux 系统的过程中&#xff0c;我们可能需要挂载一些机械硬盘或者移动硬盘来存储数据。手动挂载虽然简单&#xff0c;但每次重启后都需要重新操作&#xff0c;未免有些繁琐。那么&#xff0c;如何让硬盘在开机时自动挂载呢&#xff1f;本篇博客将详细介绍如何通过配…

[项目] C++基于多设计模式下的同步异步日志系统

[项目] C基于多设计模式下的同步&异步日志系统 文章目录 [项目] C基于多设计模式下的同步&异步日志系统日志系统1、项目介绍2、开发环境3、核心技术4、日志系统介绍4.1 日志系统的价值4.2 日志系统技术实现4.2.1 同步写日志4.2.2 异步写日志 5、相关技术知识5.1 不定参…

[论文阅读] | 智能体长期记忆

更新记录&#xff1a; 2024.11.2 人大高瓴长期记忆综述 文章目录 人大高瓴长期记忆综述智能体与环境交互记忆的来源/形式/操作来源&#xff1a;(1)当前任务历史信息 (2)其他任务的信息 (3)外部知识形式&#xff1a;如何表达记忆的内容&#xff0c;通过(1)文本 (2)参数(训练到模…

Rust 力扣 - 59. 螺旋矩阵 II

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 使用一个全局变量current记录当前遍历到的元素的值 我们只需要一圈一圈的从外向内遍历矩阵&#xff0c;每一圈遍历顺序为上边、右边、下边、左边&#xff0c;每遍历完一个元素后current 我们需要注意的是如果上…

AppInventor2能否用网络摄像头画面作为屏幕的背景?

// 视频是否可以作为背景&#xff1f; // 有会员提问&#xff1a;能否用网络摄像头的实时画面作为屏幕的背景&#xff1f;就跟这个一样背景全覆盖&#xff1a; 摄像头画面是一个在线的网站链接视频流。 // 原先思路 // 1、目前原生组件无法直接实现这个功能&#xff0c;屏幕…

国产操作系统卖疯了!最营收7.84亿,最低1.5亿

最近看各种报道&#xff0c;似乎国产化有提速的绩效&#xff0c;那么既然如此&#xff0c;各个国产操作系统厂商是不是都起飞了呢&#xff1f; 周末闲暇之余&#xff0c;我们来看看各家的营收表现。 银河麒麟2024年1-9月一共卖了多少钱&#xff1f; 前几天中国软件发布了202…

CDN加速实战:使用七牛云CDN加速阿里云OSS资源访问

今天是双11搞活动,在阿里云1元注册了个域名,想着在学CDN,想使用CDN做个加速项目,但是阿里的要收费,上网查了下七牛云的不收费,想着将七牛云的CDN结合阿里的DNS做个访问加速,刚好看到了阿里的一个文章,照着改了改,实践成功了。 阿里文章:使用CDN加速OSS资源访问_对象…