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.rhkb.cn/news/460451.html

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

相关文章

Kafka 与传统 MQ 消息系统之间有三个关键区别?

大家好&#xff0c;我是锋哥。今天分享关于【Kafka 与传统 MQ 消息系统之间有三个关键区别&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; Kafka 与传统 MQ 消息系统之间有三个关键区别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 …

TLKS-PMG-100BM这款输电线路智能多目视频监控装置,它具体有哪些亮点和优势?

TLKS-PMG-100BM输电线路智能多目视频监控装置&#xff08;输电线路全景视频监控装置、输电线路云台变焦视频监控装置&#xff09;无疑是一款功能全面、性能卓越的输电线路智能监控装置。它配备了水平360、垂直90旋转的全向云台摄像头&#xff0c;能够轻松实现全景视野监视&…

Java中的运算符【与C语言的区别】

目录 1. 算术运算符 1.0 赋值运算符&#xff1a; 1.1 四则运算符&#xff1a; - * / % 【取余与C有点不同】 1.2 增量运算符&#xff1a; - * / % * 【右侧运算结果会自动转换类型】 1.3 自增、自减&#xff1a;、-- 2. 关系运算符 3. 逻辑运算符 3.1 短路求值 3.2 【…

目标检测:YOLOv11(Ultralytics)环境配置,适合0基础纯小白,超详细

目录 1.前言 2. 查看电脑状况 3. 安装所需软件 3.1 Anaconda3安装 3.2 Pycharm安装 4. 安装环境 4.1 安装cuda及cudnn 4.1.1 下载及安装cuda 4.1.2 cudnn安装 4.2 创建虚拟环境 4.3 安装GPU版本 4.3.1 安装pytorch&#xff08;GPU版&#xff09; 4.3.2 安装ultral…

HT7178 带输出关断的20V,14A全集成同步升压转换器

1、特点 输入电压范围VpIN:2.7V-20V 输出电压范围VouT:4.5V-20V 可编程峰值电流:14A 高转换效率: 95%(VPIN7.2V, VoUT 16V, IouT3A) 94%(VPIN12V,VoUT18V,IoUT4A) 90%(VPIN3.3, VoUT-9V,IOUT3A) 轻载条件下两种调制方式:脉频调制(PFM)和 强制脉宽调试(PWM) 集成输出关断的栅极…

使用axios请求分页

npm install axios <template><div><el-table :data"items" style"width: 100%"><el-table-column prop"id" label"ID" /><el-table-column prop"name" label"名称" /><!-- 添…

基于SpringBoot的在线医疗问答平台

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

codeforces _ 补题

C. Ball in Berland 传送门&#xff1a;Problem - C - Codeforces 题意&#xff1a; 思路&#xff1a;容斥原理 考虑 第 i 对情侣组合 &#xff0c;男生为 a &#xff0c;女生为 b &#xff0c;那么考虑与之匹配的情侣 必须没有 a | b &#xff0c;一共有 k 对情侣&#x…

【Canvas与图标】长方形牛皮纸文件袋图标

【成图】 120*120的图标 大图 小图&#xff1a; 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>长方文件袋图标</title>…

奔走相告! ClickHouse 全新构建了强大的 JSON 数据类型

本文字数&#xff1a;8969&#xff1b;估计阅读时间&#xff1a;23 分钟 作者&#xff1a;Pavel Kruglov 本文在公众号【ClickHouseInc】首发 简介 JSON 已成为现代数据系统中处理半结构化和非结构化数据的首选格式。无论是在日志记录和可观测性 (observability) 应用场景、实…

统信UOS下启动图形界面应用工具manager报错:No protocol specified的解决办法

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、问题情况 达梦提供了丰富的图形界面工具&#xff0c;包括&#xff1a;manager、monitor、dbca等&#xff0c;但在统信操作系统进入终端去启动manager时报错&#xff1a;No protocol specified。 咨询了达…

【CSS3】css开篇基础(6)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【设计模式系列】迭代器模式(七)

一、什么是迭代器模式 迭代器模式&#xff08;Iterator Pattern&#xff09;是一种行为型设计模式&#xff0c;它提供一种方法来顺序访问一个聚合对象中的各个元素&#xff0c;而不暴露其内部的表示。迭代器模式将集合的遍历过程封装在一个独立的迭代器对象中&#xff0c;这样…

Linux线程安全(二)条件变量实现线程同步

目录 条件变量 条件变量初始化和唤醒 键盘触发条件变量唤醒线程demo 条件变量的等待 条件变量定时等待demo 条线变量实现多线程间的同步 条件变量 条件变量是为了控制多个线程的同步工作而设计的 比如说一个系统中有多个线程的存在但有且仅有一个线程在工作&#xff0c…

数据结构---顺序表

文章目录 线性表顺序表的使用及其内部方法ArrayList 的扩容机制顺序表的几种遍历方式顺序表的优缺点顺序表的模拟实现杨辉三角扑克牌算法 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&a…

大模型,多模态大模型面试【LoRA,分类,动静态数据类型,DDPM,ControlNet,IP-Adapter, Stable Diffusion】

大模型&#xff0c;多模态大模型面试【LoRA&#xff0c;分类&#xff0c;动静态数据类型&#xff0c;DDPM&#xff0c;ControlNet&#xff0c;IP-Adapter, Stable Diffusion】 问题一&#xff1a;LoRA是用在节省资源的场景下&#xff0c;那么LoRA具体是节省了内存带宽还是显存呢…

【力扣刷题实战】相同的树

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a; 相同的树 题目描述 示例 1&#xff1a; 示例 2&#xff1a; 示例 3&#xff1a; 解题思路 题目理解 算法选择 具体思路 解题要点 完整代码&#xff08;C语言&#xff09; 兄弟们共勉 &#…

2024年AI绘画与写作工具排行榜:提升创作效率必备利器推荐

2024年&#xff0c;AI绘画和写作工具迎来全新突破&#xff0c;从艺术创作到内容写作&#xff0c;越来越多的创作者开始依赖AI工具来提升效率、拓展创意。而随着市场上AI工具的增多&#xff0c;如何选择适合的工具变得尤为重要。今天为大家推荐一些提升创作效率的AI绘画和写作利…

沈阳乐晟睿浩科技有限公司抖音小店新篇章

在当今数字化时代&#xff0c;电商行业如雨后春笋般迅速崛起&#xff0c;其中抖音小店凭借其庞大的用户基础、精准的推荐算法和便捷的购物体验&#xff0c;成为了电商领域的新宠。在这场电商变革中&#xff0c;沈阳乐晟睿浩科技有限公司&#xff08;以下简称“乐晟睿浩”&#…

SQL语言基础

SQL(Struct Query Language)是结构化查询语言的简称&#xff0c;是一种在关系型数据库中定义和操纵数据的标准语言。 不要使用面向对象的思想学习SQL&#xff0c;因为它不是面向对象的语言目标 SQL语言简介(了解)从数据库数据检索数据(重点)子查询(重点)Oracle常用函数(掌握) …