Visual C++第07章 图形、文本和位图
Visual C++绘图

实验1 Visual C++图形程序设计一、实验目的Visual C++是在Microsoft C的基础上发展而来的,随着计算机软、硬件技术的快速发展,如今Visual C++已成为集编辑、编译、运行、调试于一体功能强大的集成编程环境。
本章以Visual C++ 6.0为对象,主要介绍Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程以及菜单设计等基础,目的是通过对Visual C++的学习,掌握Visual C++图形程序设计的方法,为计算机图形学原理部分的算法实现提供程序工具和方法。
二、实验任务1.学习Visual C++图形程序设计的方法;2.掌握Visual C++集成编成环境的使用、图形设备接口和常用图形程序设计、鼠标编程、橡皮筋交互技术、画刷与画笔以及菜单设计等;三、基础知识和实验步骤3.1 Visual C++ 6.0应用程序开发方法介绍Visual C++ 6.0集成开发环境,以一个简单的实例介绍利用Visual C++应用程序工程建立方法和程序设计框架。
3.1.1 Visual C++的集成开发环境从开始菜单中启动Visual C++ 6.0,进入开发集成环境。
打开一个项目后,可以看到Visual C++ 6.0的开发环境由标题栏、工具栏、工作区窗口、源代码编辑窗口、输出窗口和状态栏组成,见图3.1所示。
标题栏用于显示应用程序名和所打开的文件名,标题栏的颜色可以表明对应窗口是否被激活。
菜单栏包括文件、编辑、显示、插入、工程、编译、工具、窗口和帮助九项主菜单,包含了从源代码的编辑、界面设计、程序调试和编译运行在内的所有功能。
工具栏列出了常用的菜单命令功能和对象方法。
工具栏的下面是两个窗口,一个是工作区窗口,用于列出工程中的各种对象,一个是源代码编辑窗口,用于各个对象的程序设计。
输出窗口显示项目建立过程中所产生的各种信息。
屏幕底端是状态栏,它给出当前操作或所选择命令的提示信息。
Visual C++中DDB与DIB位图编程全攻略

Visual C++中DDB与DIB位图编程全攻略1. 基本概念先来用通俗的语句讲解位图和调色板的概念。
我们知道,自然界中的所有颜色都可以由红、绿、蓝(R,G,B)三基色组合而成。
针对含有红、绿、蓝色成分的多少,可以对其分别分成0~255个等级,而红、绿、蓝的不同组合共有256×256×256种,因此约能表示1600万种颜色。
对于人眼而言,这已经是"真彩色"了。
对每个像素进行了(R,G,B)量化的图像就是位图,其在计算机中对应文件的扩展名一般为.bmp。
既然用R,G,B的量化值就可以直接记录一张位图的所有像素,那我们需要调色板干什么呢?首先,我们可以计算完全利用(R,G,B)组合来存储一个800×600的位图所需要的空间为:800×600×3 = 1440000(字节)=1.37M(字节)惊人的大!因此,调色板横空出世了,它的功能在于缓解位图文件存储空间过大的问题。
假设一个位图为16色,其像素总数为800×600。
我们只需要用4个bit就可以存储这个位图的每个像素在16种颜色中所处的等级,然后调色板提供了这16种等级对应的(R,G,B)值,这样,存储这个16色位图只需要:800×600×4/8 = 240000(字节)= 0.22 M(字节)额外的存储R,G,B表的开销(即调色板Palette,也称为颜色查找表LUT)仅仅为16×3=48字节。
存储空间被大为减少!常见的位图有单色、16色、256色、16位及24位真彩色5种,对于前三者(即不大于256色)都可以调色板方式进行存储,而对16位及24位真彩色以调色板进行存储是不划算的,它们直接按照R,G,B分量进行存储。
在此基础上我们来分析DDB位图(Device-dependent bitmap,与设备相关的位图)与DIB位图(Device-independent bitmap,与设备无关的位图)的概念以及二者的区别。
文字和图形处理技术

课件制作人:宋坤
9.2 设备上下文介绍
GDI对象和设备上下文
文
各种样式文本的输出
本
和
各种图形的绘制
图
形
对图形进行颜色填充
处
理
图像的绘制
图像在窗口中的操作
课件制作人:宋坤
本章目录
9.1 GDI概述 √ 9.2 设备上下文介绍 √ 9.3 GDI对象 √ 9.4 文本输出 √ 9.5 绘制图形 √ 9.6 绘制图像 √ 9.7 课后习题 √
9.3 GDI对象
void CDrawDlg1Dlg::OnPaint() {
HDC hDC; hDC = GetDC()->m_hDC; CPen pen; //创建一个红色的宽度为2的画笔 pen.CreatePen(PS_SOLID,2,RGB(255,0,0)); //选中画笔 SelectObject(hDC,pen); CRect rc(80,30,200,80); //利用画笔绘制矩形 Rectangle(hDC,80,30,200,80); //代码省略 } 运行后效果如图9-2所示。
参数值描述 用于绘制实线 用于绘制虚线 用于绘制点线 用于绘制虚线和点线交替的直线 用于绘制一虚线和两点交替的直线 不可见画线 实线画笔,用来压缩图表使之适合有界矩形 创建一支几何画笔 创建一支装饰画笔 创建一支交替设置像素的画笔 创建一支使用用户提供的风格数组的画笔 尾帽是圆的 尾帽是方的 尾帽是平面的 连接是斜截式的
VisualBasic程序设计入门PPT课件

vb程2序02设1/计7/简27明教程
本书目录
3
1.1引例和VB的特点
• “Visual”表示可视化,是一种图形用户界面的软件开 发平台,其特点是在设计阶段可见软件的外在界面。
• Basic=Beginners all-Purpose Symbolist Instruction Code(初 学者通用符号指令代码)
件)
vb程2序02设1/计7/简27明教程
本书目录
本章目录
5
vb程2序02设1/计7/简27明教程
本书目录
6
vb程2序02设1/计7/简27明教程
本书目录
7
小结1:VB的特点 P4
❖ 具有基于对象的可视化设计工具 ❖ 事件驱动的编程机制 ❖ 提供了易学易用的应用程序集成开发环境 ❖ 支持结构化程序设计语言 ❖ 强大的网络、数据库、多媒体功能 ❖ 完备的帮助功能
保存一个应用程序所 有属性以及组成这个应 用程序所有的文件。 工程文件的扩展名 为.VBP,工程文件名显 示在工程文件窗口的标 题框内。
已存盘
工具箱
工程窗口
窗体窗口
属性窗口
窗体布局
vb程2序0立2即 设1窗 口 /计7/简27明教程
未存盘
本书目录
本章目录
18
1. 工程的作用
工程概述
• 在VB中,使用工程来管理构成应用程序的所有不同的文件。当创建完成工程 的全部文件之后,可将此工程转换成可执行文件 (.exe),直接在Windows下执 行。
图 形 框 (P ic tu re B o x )
由21个文 本 框被( T e 绘x t B o 制x ) 成按钮形式的图标构成, 利用命这令 按些钮 ( C工o m m具a n d ,B u t t o 用n ) 户可以在窗体上设计 各种单控选 按件钮 ( O。p t i o 其n B u t t中o n ) 20个控件称为标准控件
用Microsoft Visual C显示位图文件方法总结

用Microsoft Visual C++显示位图图片的几种方法总结一,用控件框架作为装载位图的容器来显示位图用控件作为容器框架来显示位图是很多应用程序中都会遇到和用到的,因为它的方便可控制性1)、首先,我们先了解几个用到的函数:1、CWnd::GetDlgItemCWnd* GetDlgItem( int nID ) const;void CWnd::GetDlgItem( int nID, HWND* phWnd ) const;返回值:指向给定的控件或子窗口的指针。
如果没有控件具有nID给出的整数ID,则返回NULL。
返回的指针可能是临时的,不能被保存以供将来使用。
参数:nID 指定了要获取的控件或子窗口的标识符。
phWnd 指向子窗口的指针。
说明:这个函数获得对话框或其它窗口中指定控件或子窗口的指针。
返回的指针通常被强制转换为nID所标识的控件类型。
2、CWnd::GetDCCDC* GetDC( );返回值:如果调用成功,则返回CWnd客户区的设备环境;否则,返回NULL。
这个指针可能是临时的,不能被保存以供将来使用。
说明:这个函数获得一个指针,指向一个客户区的公用的、属于类的或者私有的设备环境,依赖于为CWnd指定的类风格。
对于公用的设备环境,GetDC每次获得设备环境时都给它赋予缺省值。
对于属于类的或者私有的设备环境,GetDC保持原来的属性不变。
在随后的图形设备接口(GDI)函数中可以使用设备环境以在客户区中绘图。
除非设备环境属于一个窗口类,否则在绘图之后必须调用ReleaseDC成员函数以释放设备环境。
由于在同一时刻只有五个公用设备环境可供使用,因此如果释放设备环境时失败,可能导致其它应用程序不能访问设备环境。
如果在注册窗口类的时候,在WNDCLASS的风格中指定了CS_CLASSDC,CS_OWNDC或CS_PARENTDC,则GetDC成员函数将返回属于CWnd类的设备环境。
第8章:利用CDC实现绘图程序

CWindowDC对象的窗口句柄保存在成员变量m_hWnd,为构造 CWindowDC,需将CWnd作为参数传递给构造函数。
Visual C++
2.应用程序架构包含的主要类 该程序主要包含的类有CAboutDlg关于对话框类、 CMainFrame主框架类、CSingleDrawDoc文 档类、CSingleDrawView视图类。
有关绘制功能的实现,一般是在视图类中完成, 因此,这一章的实例都是对视图类 CSingleDrawView的操作。
✓ CPaintDC对象在构造时调用CWnd::BeginPaint函数,并返回 DC用于绘图,在析构时自动调用CWnd::EndPaint函数释放DC。 CPaintDC仅在WM_PAINT消息需要响应时才起作用,通常是 在应用程序的OnPaint响应函数中使用。
8.1.4 续1
Visual C++
在由AppWizard创建的MFC应用程序中,视图类的OnDraw 成员函数是一个处理图形的关键虚函数,它带有一个指向设备环 境对象的指针pDC,MFC的绘图成大多都是通过pDC这个指针来
加以访问的。
下面为CDC类的函数的分类
分类 位图函数 剪裁函数 坐标函数 设备描述表函数
Visual C++
用途 操作位图和像素的函数 定义和操作剪裁设备边界的函数 在物理设备和逻辑设备之间转换的函数 获取有关DC及其属性信息的函数
计算机导论 第7章ppt课件
Visio基本操作
• 图形操作 (6)图形格式修改格式设置:
1)填充颜色(形状内的颜色) 2)填充图案(形状内的图案) 3)图案颜色(构成图案的线条的颜色) 4)线条颜色和图案 5)线条粗细(线条的粗细) 6)填充透明度和线条透明度 若要改变填满图形的颜色,您只需将鼠标移到形状工具栏上的 填满色 彩 图示旁,按下拉箭头,并选取颜色即可。或者选中图形,点击鼠标右键( 如上图),设定线条样式的方式与设定填满颜色的方式类似,而不同点在於 :选择的是线条色彩图示 ,您可以利用相同的方法来改变线条的宽度、 样式,以及线条的端点。
依次单击“指针”工具 中文本之后,按DELETE键。
Visio基本操作
• VISIO文字操作 • (4) 设置文本格式
可以设置文本的格式 :使它成为斜体、给它加下划线、使它居中显示, 还可以改变文本字体的颜色,等。方式有如下两种: 1)选中要更改的字体,点击鼠标右键,选择“字体”,可以设置文本格式。 2)选中要更改的字体,点击工具栏【字体】,可以更改文本格式。
• 目前流行版本:Microsoft Visio 2010
常见图表类型
业务流程图 组织结构图
项目管理图
因果图 统计、营销 图表
灵感激发图
图例举例:技术路线图
质量安全关键点调查与外部环境分析 (生鲜农产品安全追溯系统体系框架)
关键模型、技术 数据编码与采集 快速检测技术 冷链/温度监测 质量安全风险管理
绘图区
形状、模具
Visio基本操作
• 添加形状
Visio基本操作
• 图形操作 (1)Visio 绘制图形的两种方式
绘图工具栏:可以绘制正方形、长方形、圆、直线和曲线等图形。 使用模具:可以绘制各种各样的专业图形。
Visual C++6.0 绘图基础
OnDraw()函数:
void CTestView::OnDraw(CDC* pDC) { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here } •pDC定义为CDC类的指针。 •pDoc通过GetDocument()函数得到了指向文档类 CTestDoc的指针。 •ASSERT_VALID(pDoc)函数使pDoc指针有效。 •使用pDC指针,可以对CDC类的成员函数进行操作。 •OnDraw()函数是由系统框架直接调用的,每当窗口重绘 时就会自动执行。
在选择GDI对象进行绘图时,需要遵循以下步骤:
绘图开始前,创建一个GDI对象,并选入当前设备上
下文,同时保存原GDI对象指针。
使用新GDI对象绘图。 绘图结束后,使用已保存的原GDI对象指针将设备上 下文恢复原状。
2.3.2 映射模式
把图形显示在屏幕坐标系中的过程称为映射 根据映射模式的不同可以分为 逻辑坐标
!按钮
点击工具条上的 “!”按钮,就可以直接编译、运行程 序 尽管未编写一句代码,但Test程序已经形成一个可执 行程序框架
2.3 MFC基本绘图函数
在Windows平台上,应用程序的图形设备接口
(Graphics Device Interface,GDI)被抽象化为设备
上下文CDC类(Device Content,DC)。在微软基类库
第二章
本章学习目标
开发工具的选择 MFC上机操作步骤 MFC基本绘图函数 绘制像素点函数 路径层函数 获取像素点颜色函数 绘制Bezier曲线函数 绘制直线段函数 位图操作函数 绘制矩形函数 图形文本函数 绘制椭圆函数 双缓冲机制 绘制椭圆弧函数 设备上下文的调用和释 绘制扇形函数 放 绘制多边形函数 MFC绘制图形的几种方 法
C语言程序设计教程ppt课件(2024)
使用嵌套的for循环打印九九乘法表。
23
04
数组与字符串处理
2024/1/30
24
一维数组定义和操作
2024/1/30
01
一维数组定义
类型说明符 数组名
[常量表达式];
02
一维数组初始化
在定义数组时对数 组元素赋以初值;
04
一维数组操作
包括赋值、输入输
03
出、排序、查找等
。
一维数组引用
do-while循环
与while循环类似,但至少会执行一次 循环体。
示例
int i = 0; do { printf("%d ", i); i; } while (i < 10);
语法
do { // code to be executed } while (condition);
2024/1/30
19
赋值运算符
包括赋值运算符(=)和复合赋 值运算符(+=、-=、*=、/=、 %=),用于为变量赋值或进行 运算后赋值。
12
类型转换与运算顺序
2024/1/30
类型转换
当不同类型的数据进行运算时,需要进行类型转换,包括自 动类型转换和强制类型转换。自动类型转换由编译器自动完 成,而强制类型转换需要使用类型转换运算符。
0。
free函数
用于释放已分配的内存空间 ,避免内存泄漏。
2024/1/30
36
指针在数组、字符串等数据结构中应用
指针与数组
数组名本质上是一个指向数组首元素的指针;通过指针可 以访问和修改数组元素。
指针与字符串
字符串在C语言中以字符数组的形式存储,指针可以方便 地操作字符串。
C sharp 第七章PPT教学课件
for(int i=0 ; i<10 ; i++)
data[i] = r.ReadInt32() ;
r.Close() ;
Console.WriteLine("文件的内容如下:") ;
foreach(int m in data)
Console.Write("{0} ," , m) ;
}
}
2020/12/11
2020/12/11
19
using System; using System.IO; //使用文件必须引入的命名空间 class WriteFile {
static void Main() {
StreamWriter w = new StreamWriter("d:\\f2.dat" , true) ; Console.WriteLine("输入您的学号:"); string stu_no = Console.ReadLine(); w.Write(stu_no); Console.WriteLine("输入您的姓名:"); string stu_name = Console.ReadLine(); w.Write(stu_name); Console.WriteLine("输入您的籍贯:"); string city = Console.ReadLine(); w.Write(city); w.Close(); } }
第7章 文 件 和流
在应用程序中,经常需要用文件来保存数据,这就要用到文件的输入/ 输出操作。本章主要介绍和文件相关的类,以及目录、文件操作和创 建、读/写文件的方法。
7.1 用流读写类 C# 语言把所有文件都看成是顺序字节流,用抽象类Stream代表一个流
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第7章绘图、字体和位图Windows的GDI(设备图形接口),提供了绘图的基本工具,如:画点、线、多边形、位图以及文本输出等。
MFC的设备环境类CDC封装了全部的绘图函数,使得绘制的图形即可以显示,又可以打印。
7.1概述Visual C++的CDC(Device Context,设备环境)类是MFC中最重要的类之一,它封装了绘图所需要的操作,是用户编写图形和文字处理程序必不可少的。
当然,绘制图形和文字时还必须指定相应的设备环境。
设备环境是由Windows保存的一个数据结构,该结构包含应用程序向设备输出时所需要的信息。
1、设备环境类CDC设备环境是由Windows保存的一个数据结构,该结构包含应用程序向设备输出时所需要的信息,例如:图形是在屏幕上显示还是通过打印机输出。
为了能让用户使用一些特殊的设备环境,基类CDC还派生了以下各类:(1)CPaintDC类,此类比较特殊,它的构造函数和析构函数都是针对OnPaint进行的。
用户一旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)指针来使用,CPaintDC类的构造函数会自动调用BeginPaint,而它的析构函数则会自动调用EndPaint。
(2)CClientDC和CWindowDCA、CClientDC只能在窗口的客户区(不包括边框、标题栏、选单栏以及状态栏)进行绘图,点(0,0)通常指的是客户区的左上角。
其构造函数调用GetDC,析构函数调用ReleaseDC函数B、CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。
其构造函数调用GetWindowDC,析构函数调用ReleaseDC函数。
(3)CMetaFileDC封装了在一个Windows图元文件中绘图的方法。
图元文件是一系列与设备无关的图片的集合,由于它对图像的保存比像素更精确,因而往往在要求较高的场合下使用,例如:AutoCAD的图像保存等。
目前的Windows已使用增强格式(enhanced-format)的32位图元文件来进行操作。
7.1.2坐标映射在讨论坐标之前,先看下列语句:pDC->Rectangle(CRect(0,0,200,200));这是在某个设备环境中绘制一个高为200个像素,宽也为200个像素的方块。
由于默认的映射模式是MM_TEXT,其逻辑坐标(在各种映射模式下的坐标)和设备坐标(显示设备或打印设备坐标系下的坐标)相等。
因此这个方块在1024*768的显示器上看起来要比在640*480的显示器上显得小一些,而且若将它打印在600dpi 精度的激光打印机上,这个方块就会显得更小了。
为了能保证打印的结果不受设备的影响,Windows定义了一些映射模式(如下所示):这些映射决定了设备坐标和逻辑坐标之间的关系。
映射模式含义MM_TEXT 每个逻辑单位等于一个设备像素,x向右为正,y向下为正MM_HIENGLISH 每个逻辑单位为0.001英寸,x向右为正,y向上为正MM_LOENGLISH 每个逻辑单位为0.01英寸,x向右为正,y向上为正MM_HIMETRIC 每个逻辑单位为0.01mm,x向右为正,y向上为正MM_LOMETRIC 每个逻辑单位为0.1mm,x向右为正,y向上为正MM_TWIPS每个逻辑单位为一个点的1/20(一个点是1/72英寸),x向右为正,y向上为正MM_ANISOTRPIC x,y 可变比例MM_ISOTROPIC x,y 等比例这样,我们就可以通过调用CDC::SetMapMode(int nMapMode)来设置相应的映射模式。
例如:若将映射模式设置为MM_LOMETRIC,那么不管在什么设备中调用上述语句,都将显示出20*20mm的方块。
而MM_ISOTROPIC映射模式下:纵横比总是1:1,也就是说,无论比例因子如何变化,圆总是圆的。
但,MM_ANISOTROPIC映射模式下,x和y的比例因子可以独立地变化,即圆可以被拉扁成椭圆形状。
在映射模式MM_ANISOTROPIC和MM_ISOTROPIC中,常常可以调用CDC::SetWindowExt(设置窗口大小)和CDC::SetViewportExt(设置视口大小)函数来设置所需要的比例因子。
“窗口”和“视口”的概念往往不易理解。
所谓“窗口”,可以理解是一种逻辑坐标下的窗口,而“视口”是我们实际看到的那个窗口,也就是设备坐标下的窗口,根据“窗口”和“视口”的大小就可以确定x和y的比例因子,它们的关系如下:x比例因子=视口x大小/窗口x大小y比例因子=视口y大小/窗口y大小例:将一个椭圆绘制在视窗中央,且当视图的大小发生改变时,椭圆的形状也会随之改变。
(301页)(通过设置窗口和视口大小来改变显示的比例)(1)建一个单文档应用程序,名为“椭圆的绘制”(2)在View类的OnDraw函数里加如下代码:void CMyView::OnDraw(CDC* pDC){//CMyDoc* pDoc = GetDocument();//ASSERT_V ALID(pDoc);CRect rectClient;//定义矩形对象GetClientRect(rectClient);//获得当前窗口的客户区大小pDC->SetMapMode(MM_ANISOTROPIC);//设置MM_ANISOTROPIC映射模式pDC->SetWindowExt(1000,1000);//设置窗口范围pDC->SetViewportExt(rectClient.right,-rectClient.bottom);//设置视口范围pDC->SetViewportOrg(rectClient.right/2,rectClient.bottom/2);//设置视口原点pDC->Ellipse(CRect(-500,-500,500,500));//椭圆的4个坐标点// TODO: add draw code for native data here}(3)编译运行,当你改变窗口大小,椭圆也随之改变。
7.1.3 CPoint、CSize和CRect在图形绘制操作中,常常需要使用MFC中的CPoint(点)、CSize(大小)和CRect(矩形)等简单数据类。
它们是对Windows的POINT、SIZE和RECT结构的封装,因此它们可以直接使用各自结构的数据成员,如下所示:(302--305)typedef struct tagPOINT{ LONG x; //点的x坐标LONG y; //点的y坐标}POINT;Typedef struct tagSIZE{ int cx; //水平大小(表示矩形的宽度)int cy; //垂直大小(表示矩形的高度)}SIZE;typedef struct tagRECT{ LONG left; //矩形左上角点的x坐标LONG top; //矩形左上角点的y坐标LONG right; //矩形右下角点的x坐标LONG bottom;//矩形右下角点的y坐标}RECT;1、CPoint,CSize和CRect类的构造函数CPoint类带参数的常用构造函数原型如下:CPoint(int initX,int initY);CPoint(POINT initPt);其中:initX和initY分别用于指定CPoint的成员x和y的值。
initPt用于指定一个POINT结构或CPoint对象来初始化CPoint的成员。
CSize类带参数的常用构造函数原型如下:CSize(int initCX,int initCY);CSize(SIZE initSize);其中:initCX和initCY用于分别设置CSize的cx和cy成员。
initSize用于指定一个SIZE结构或CSize对象来初始化CSize的成员。
CRect类带参数的常用构造函数原型如下:CRect(int l,int t,int r,int b);CRect(const RECT &srcRect);CRect(LPCRECT lpSrcRect);CRect(POINT point,SIZE size);CRect(POINT topLeft,POINT bottomRight);其中:l,t,r,b分别用于指定CRect的left,top,right和bottom成员的值。
srcRect和lpSrcRect分别用于用一个RECT结构或指针来初始化CRect的成员。
Point用于指定矩形的左上角位置。
Size用于指定矩形的长度和宽度。
topLeft和bottomRight 分别用于指定CRect的左上角和右下角的位置。
2、CRect类的常用操作由于一个CRect类对象包含用于定义矩形的左上角和右下角点的成员变量,因此在传递LPRECT、LPCRECT或RECT结构作为参数的任何地方,都可以使用CRect对象来代替。
当构造一个CRect 时,要使它符合规范。
也就是说,使其left小于right,top 小于bottom例如,若左上角为(20,20),而右下角为(10,10),那么定义的这个矩形就不符合规范。
一个不符合规范的矩形,CRect的许多成员函数都不会有正确的结果。
因此,常常使用CRect::NormalizeRect函数使一个不符合规范的矩形合乎规范。
CRect类的操作函数有很多,这里只介绍矩形的扩大、缩小以及2个矩形的“并”和“交”操作,更多的常用的成员函数如下所示:CRect类常用的成员函数成员函数功能说明int Width()const; 返回矩形的宽度int Height()const; 返回矩形的高度CSize Size()const; 返回矩形左下角的点坐标CPoint &BottomRight 返回矩形右下角的点坐标CPoint CenterPoing()const 返回CRect的中点坐标BOOL IsRectEmpty()const 如果一个矩形的宽度或高度是0或负值,则称这个矩形为空,返回TRUEBOOL IsRectNull()const; 如果一个矩形的上、左、下和右边的值都等于0,则返回TRUE BOOL PtInRect(POINT point)const;如果点point位于矩形中(包括点在矩形的边上)则返回TRUEvoid SetRect(int x1,int y1,int x2,int y2);将矩形的各边设为指定的值,左上角点为(x1,y1),右下角点为(x2,y2)void SetRectEmpty(); 将矩形的所有坐标设置为0void NormalizeRect();使矩形符合规范如:左上角为(10,10),右下角为(20,20)是规范的。