混合类.docx

上传人:b****7 文档编号:10544201 上传时间:2023-02-21 格式:DOCX 页数:14 大小:20.18KB
下载 相关 举报
混合类.docx_第1页
第1页 / 共14页
混合类.docx_第2页
第2页 / 共14页
混合类.docx_第3页
第3页 / 共14页
混合类.docx_第4页
第4页 / 共14页
混合类.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

混合类.docx

《混合类.docx》由会员分享,可在线阅读,更多相关《混合类.docx(14页珍藏版)》请在冰豆网上搜索。

混合类.docx

混合类

CPoint

目录

CPoint类简介

CPoint类成员

CPoint构造函数

编辑本段CPoint类简介

  CPoint类与WindowsPOINT结构类似。

它还包括用来操纵CPoint和POINT结构的成员函数。

  只要POINT结构可以使用的地方,CPoint对象也可以使用。

这个类与“大小”有关的操作符可以接受CSize对象或SIZE结构,因为这两者是可以互换的。

  注意:

这个类派生于tagPOINT结构(名字tagPOINT是POINT结构的不太常用的有关名字)。

这意味着POINT结构的数据成员,x和y,也是CPoint的可以访问的数据成员。

  #include

  请参阅:

CRect,CSize

编辑本段CPoint类成员

  构造CPoint构造一个CPoint

  操作符Offset给CPoint的x和y成员增加值

  operator==检查两个点是否相等

  operator!

=检查两个点是否不等

  返回CPoint值的操作符operator+=通过增加一个尺寸或点来使CPoint偏移

  operator-=通过减去一个尺寸或点来使CPoint偏移

  operator+返回一个CPoint和一个尺寸或点的和

  operator-返回一个CPoint和一个尺寸或点的偏差,或一个点的不存在

  返回CSize值的操作符operator-返回两点之间的大小差别

  返回CRect值的操作符operator+返回偏移一个大小的CRect

  operator-返回偏移一个负大小的CRect

编辑本段CPoint构造函数

  CPoint:

:

CPoint

  CPoint();

  CPoint(intinitX,intinitY);

  CPoint(POINTinitPt);

  CPoint(SIZEinitSize);

  CPoint(DWORDdwPoint);

  参数:

initX指定CPoint的成员x的值。

  initY指定CPoint的成员y的值。

  initPt用于初始化此CPoint的一个POINT结构或CPoint对象。

  initSize用于初始化CPoint值的SIZE结构或CSize。

  dwPoint设此参数的低位字为x成员,高位字为y成员。

  说明:

构造一个CPoint对象。

如果不给参数,则不初始化x和y成员。

词条图册更多图册

扩展阅读:

∙1

CRect

百科名片

CRect类与WindowsRECT结构相似,并且还包括操作CRect对象和WindowsRECT结构的成员函数。

在传递LPRECT,LPCRECT或RECT结构作为参数的任何地方,都可以传递CRect对象来代替。

目录

一、CRect类介绍

1.注意:

2.构造

3.运算

4.运算符

二、个人心得

1.案例

2.原型一:

3.原型四:

4.原型五:

一、CRect类介绍

1.注意:

2.构造

3.运算

4.运算符

二、个人心得

1.案例

2.原型一:

3.原型四:

4.原型五:

展开

编辑本段一、CRect类介绍

注意:

  这个类是从tagRECT结构派生而来的。

(tagRECT是RECT结构的不太常用的别名。

)这意味着RECT结构的数据成员(left,top,right,和bottom)也是CRect的可访问数据成员。

  一个CRect包含用于定义矩形的左上角和右下角点的成员变量。

  当指定一个CRect时,必须谨慎地构造它,以使它符合规范——也就是说,使其左坐标值小于右坐标值,使顶坐标值小于底坐标值。

例如,左上角为(10,10),右下角为(20,20)就定义了一个符合规范的矩形,但是左上角为(20,20)而右下角为(10,10)的值就定义了一个不符合规范的矩形。

如果矩形是不符合规范的,则CRect的许多成员函数都会符合不正确的结果。

(参见CRect:

:

NormalizeRect可以得到这些函数的列表。

)在你调用一个要求符合规范的矩形的函数之前,你可以通过调用NormalizeRect函数来使不符合规范的矩形成为符合规范的矩形。

  当用成员函数CDC:

:

DPtoLP和CDC:

:

LPtoDP来处理CRect时要小心。

如果显示环境的映射模式y-extent是负的,就像在MM_LOENGLISH中一样,则CDC:

:

DPtoLP将转换CRect,以使它的顶部坐标大于底部坐标。

然后像Height和Size这样的函数将返回负值作为转换后的矩形的高度,则此矩形将是不符合规范的。

  当使用重载的CRect操作符时,第一个操作数必须是一个CRect;第二个操作数可以是一个RECT结构或一个CRect对象。

  #include

  请参阅:

CPoint,CSize,RECT

  CRect类成员

构造

  CRect构造一个CRect对象

运算

  Width计算CRect的宽度

  Height计算CRect的高度

  Size计算CRect的大小

  TopLeft返回CRect的左上角点

  BottomRight返回CRect的右下角点

  CenterPoint返回CRect的中心点

  IsRectEmpty确定CRect是否是空的。

如果CRect的宽度和/或高度为0,则它是空的

  IsRectNull确定CRect的top,bottom,left,和right是否都等于0

  PtInRect确定指定的点是否在CRect之内

  SetRect设置CRect的尺寸

  SetRectEmpty设置CRect为一个空的矩形(所有的坐标都等于0)

  CopyRect将一个源矩形的尺寸拷贝到CRect

  EqualRect确定CRect是否等于给定的矩形

  InflateRect增加CRect的宽度和高度

  DeflateRect减少CRect的宽度和高度

  NormalizeRect使CRect的高度和宽度返回规范

  OffsetRect将CRect移动到指定的偏移

  SubtractRect从一个矩形中减去另一个矩形

  IntersectRect设置CRect等于两个矩形的交集

  UnionRect设置CRect等于两个矩形的并集

运算符

  operatorLPCRECT将一个CRect转换为一个LPCRECT

  operatorLPRECT将一个CRect转换为一个LPRECT

  operator=将一个矩形的尺寸拷贝到CRect

  operator==确定CRect是否与一个矩形相等

  operator!

=确定CRect是否不等于另一个矩形

  operator+=使CRect增加指定的偏移,或使CRect放大

  operator-=从CRect中减去指定的偏移,或缩小CRect

  operator&=设置CRect等于CRect和某个矩形的交

  operator|=设置CRect等于CRect和某个矩形的并

  operator+增加给定偏移量到CRect,并返回得到的CRect对象

  operator-从CRect中减去给定偏移量,并返回得到的CRect对象

  operator&创建CRect与某个矩形的交,并返回得到的CRect对象

  operator|创建CRect与某个矩形的并,并返回得到的CRect对象

编辑本段二、个人心得

  CRect类是MFC的常用类,十分基础,故整理出来以供新手参考。

  用金山快译查了一下没有rect这个单词,估计是rectangle的简写,rectangle是长方形、矩形的意思。

  默认坐标系:

原点为左上角,右边为x轴正方向,下边为y轴正方向。

案例

  构造函数(CRect)有五个原型,第二个原型和第三个原型是拷贝构造函数。

现在我用其它三个构造函数构造一个左上角坐标为(10,20),x方向边长为100,y方向边

  长有200的矩形。

原型一:

  CRectr1(10,20,110,220);

原型四:

  POINTpt={10,20};

  SIZEsize={100,200};

  CRectr2(pt,size);

原型五:

  POINTtopLeft={10,20};

  POINTbottomRight={110,220};

  CRectr3(topLeft,bottomRight);

  下面的代码可以查一个矩形的大小,新建一个单文档工程Sdi,修改OnDraw函数:

  voidCSdiView:

:

OnDraw(CDC*pDC)

  {

  CSdiDoc*pDoc=GetDocument();

  ASSERT_VALID(pDoc);

  CRectr1(10,20,110,220);

  pDC->Rectangle(&r1);

  }

  intWidth()const;

  取得宽度,intiWidth=r1.Width();iWidth的会上为100。

  intHeight()const;

  取得高度,intiHeight=r1.Height();iHeight的结果是200。

  CSizeSize()const;

  取得宽和高,CSizesize=r1.Size();size.cx为100,size.cy为200。

  CPoint&TopLeft();

  取得左上角的坐标,由于返回值是引用,所以可以通过此函数的返回值,修改左上角。

  CRectr1(10,20,110,220);

  r1.TopLeft().x=0;

  r1.TopLeft().y=0;

  r1的左上角坐标变为(0,0),也可以通过此函数取得左上角的坐标。

  CRectr1(10,20,110,220);

  CPointTopLeft=r1.TopLeft();

  TopLeft.x的值为10,TopLeft.y的值为20。

  BottomRight取得右下角坐标

  CPointCenterPoint()const;取得中心得的坐标,CPointpt=r1.CenterPoint();pt为(60,120)。

  BOOLIsRectEmpty()const;如果长度或宽度为0或非法,返回真;否则返回假。

  CRectr1(210,20,110,220);

  boolbEmpty=r1.IsRectEmpty();

  结果为真,因为左边比右边还大。

  CRect:

:

IsRectNull,四个边的坐标都为0,结果为真,否则为假。

  BOOLPtInRect(POINTpoint)const;查看一个点是否在矩形内。

  CRectr1(10,20,110,220);

  POINTpt1={10,10};

  POINTpt2={10,30};

  boolbIn1=r1.PtInRect(pt1);

  boolbIn2=r1.PtInRect(pt2);

  bIn1为假,bIn2为真。

  CRect:

:

SetRect,设置四个边的值,用法类似于构造函数的原型一。

  CRect:

:

SetRectEmpty,将四个边的坐标设置为0。

  voidCopyRect(LPCRECTlpSrcRect);复制。

  CRectr2;

  r2.CopyRect(&r1);

  r2的值和r1的值相同。

  CRect:

:

EqualRect,两个矩形是不是相同,四边坐标必须相同。

  CRectr1(10,20,110,220);

  CRectr2(110,220,10,20);

  boolbEqual=r1.EqualRect(r2);

  bEqual的值为假,因为他们的上下左右边不同,是反过来的。

  CRectr1(110,220,10,20);

  CRectr2(110,220,10,20);

  boolbEqual=r1.EqualRect(r2);

  bEqual为真,因为四边相同。

  CRect:

:

InflateRect,增加宽和高。

  CRectr(0,0,0,0);

  r.InflateRect(2,3);//结果为(-2,-3,2,3);

  SIZEsize={3,2};

  r.InflateRect(size);//结果为(-5,-5,5,5);

  CRectr1(-5,-5,-5,-5);

  r.InflateRect(&r1);//结果为(0,0,0,0);

  //左边左移-1(右移1),上边上移-1,右边右移2,下边下移2

  r.InflateRect(-1,-1,2,2);//结果为(1,1,2,2);

  CRect:

:

DeflateRect,减少宽和高,方法与InflateRect类似。

  CRect:

:

NormalizeRect,标准化,调整上下边和左右边,使得符合人类逻辑。

  CRectr(10,10,0,0);

  r.NormalizeRect();

  结果为(0,0,10,10)

  CRect:

:

OffsetRect,移动整个矩形。

  CRectr(0,0,10,10);

  r.OffsetRect(1,1);//右移1,下移1

  POINTpoint={1,1};

  r.OffsetRect(point);//再右移1,再下移1

  SIZEsize={-2,-2};

  r.OffsetRect(size);//右移-2,下移-2

  CRect:

:

SubtractRect,lpRectSrc1减去lpRectSrc2,注意不是减号。

过程不好表达,运行下面的代码就可以看到效果了。

  voidCSdiView:

:

OnDraw(CDC*pDC)

  {

  pDC->SelectStockObject(NULL_BRUSH);

  CRectr1(10,10,100,100);

  CRectr2(50,10,150,150);//和CRectr2(50,50,150,150);结果不一样

  pDC->Rectangle(r1);

  pDC->Rectangle(r2);

  {//红色区域是SubtractRect的结果

  CRectr;

  r.SubtractRect(r1,r2);

  CBrushbrush(RGB(255,0,0));

  pDC->SelectObject(&brush);

  pDC->Rectangle(&r);

  }

  }

  CRect:

:

IntersectRect,求交集

  voidCSdiView:

:

OnDraw(CDC*pDC)

  {

  pDC->SelectStockObject(NULL_BRUSH);

  CRectr1(10,10,100,100);

  CRectr2(50,10,150,150);//和CRectr2(50,50,150,150);结果不一样

  pDC->Rectangle(r1);

  pDC->Rectangle(r2);

  {//绿色区域是IntersectRect的结果

  CRectr;

  r.IntersectRect(r1,r2);

  CBrushbrush(RGB(0,255,0));

  pDC->SelectObject(&brush);

  pDC->Rectangle(&r);

  }

  }

  CRect:

:

UnionRect,求并集

  voidCSdiView:

:

OnDraw(CDC*pDC)

  {

  pDC->SelectStockObject(NULL_BRUSH);

  CRectr1(10,10,100,100);

  CRectr2(50,50,150,150);//和CRectr2(50,50,150,150);结果不一样

  pDC->Rectangle(r1);

  pDC->Rectangle(r2);

  {//蓝色边框是UnionRect的结果

  CRectr;

  r.UnionRect(r1,r2);

  CPenpen(PS_DOT,1,RGB(0,0,255));

  pDC->SelectObject(&pen);

  pDC->Rectangle(&r);

  }

  }

  CRect:

:

operatorLPCRECT,转化成LPCRECT类型。

  CRect:

:

operatorLPRECT,转化成LPRECT

  CRectr(0,0,100,100);

  LPCRECTpCRect=r;

  LPRECTpRect=r;

  第二行会调用LPCRECT操作符,第三行调用LPRECT操作符。

  typedefconstRECT*LPCRECT;//pointertoread/onlyRECT

  typedefstructtagRECT

  {

  LONGleft;

  LONGtop;

  LONGright;

  LONGbottom;

  }RECT,*PRECT,NEAR*NPRECT,FAR*LPRECT;

  CRect:

:

operator=,重载“=”运算符,实际调用CopyRect。

  CRect:

:

operator==,重载“==”运算符,实际调用EqualRect。

  operator!

=,重载“!

=”运算符,实际调用EqualRect。

  CRect:

:

operator+=,重载“+=”运算符,第一个原型和第二个原型调用OffsetRect,第三个原型调用InflateRect。

  CRect:

:

operator-=,重载“-=”运算符,第一个原型和第二个原型调用OffsetRect,第三个原型调用InflateRect。

  CRect:

:

operator&=,重载“&=”运算符,实际调用IntersectRect。

  CRect:

:

operator|=重载“|=”运算符,实际调用UnionRect。

  +、-、&、|和上面的类似,就不再详细讲解了。

  [1]

词条图册更多图册

参考资料

∙1

本文由何志丹2009-4-28原创于自己的网站,并马上转到百科。

  

CRect

扩展阅读:

∙1

参考资料:

《MFC类库详解》

∙2

本文的代码可以到下载

CSize

  CSize类

  类CSize是对Windows结构SIZE的封装,凡是能用SIZE结构的地方都可以用CSize代替。

  结构SIZE表示一个矩形的长度和宽度,其定义为:

  typedefstructtagSIZE{

  LONGcx;

  LONGcy;

  }SIZE;

  其中cx、cy分别是宽度和高度。

  与CPoint类似,CSize也提供了一些重载运算符。

如运算符“+”,“-”,“+=”和“-=”,用于两个CSize对象或一个CSize对象与一个CPoint对象的加减运算,运算符“==”和“!

=”用于比较两个CSize对象是否相等。

  由于CPoint和CSize都包含两个整数类型的成员变量,他们可以进行相互操作。

CPoint对象的操作可以以CSize对象为参数。

同样,CSize对象的操作也可以以CPoint对象为参数。

如可以用一个CPoint对象构造一个CSize对象,也可以用一个CSize对象构造一个CPoint对象,允许一个CPoint对象和一个CSize对象进行加减运算。

词条图册更多图册

扩展阅读:

∙1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1