CPoint
类
类似于 Windows POINT
结构。
语法
class CPoint : public tagPOINT
成员
公共构造函数
名称 | 描述 |
---|---|
CPoint::CPoint |
构造一个 CPoint 。 |
公共方法
名称 | 描述 |
---|---|
CPoint::Offset |
向 CPoint 的 x 和 y 成员添加值。 |
公共运算符
“属性” | 描述 |
---|---|
CPoint::operator - |
返回 CPoint 和 SIZE 的差值,或 POINT 的求反,或两个 POINT 之间的 CSize 差值,或负 SIZE 导致的偏移量。 |
CPoint::operator != |
检查两个 POINT 是否不相等。 |
CPoint::operator + |
返回 CPoint 和 SIZE 或 POINT 的总和,或 SIZE 导致的 CRect 偏移量。 |
CPoint::operator += |
通过加 SIZE 或 POINT 导致的 CPoint 偏移量。 |
CPoint::operator -= |
通过减 SIZE 或 POINT 导致的 CPoint 偏移量。 |
CPoint::operator == |
检查两个 POINT 是否相等。 |
备注
它还包括用于操作 CPoint
和 POINT
结构的成员函数。
无论在何处使用 POINT
结构,都可以使用 CPoint
对象。 与 SIZE
交互的这个类的运算符接受 CSize
对象或 SIZE
结构,因为两者是可互换的。
注意
此类派生自 tagPOINT
结构。 (名称 tagPOINT
是 POINT
结构的一个不太常用的名称。)这意味着 POINT
结构的数据成员 x
和 y
是 CPoint
的可访问数据成员。
注意
有关共享实用工具类(例如 CPoint
)的详细信息,请参阅共享类。
继承层次结构
tagPOINT
CPoint
要求
标头:atltypes.h
CPoint::CPoint
构造 CPoint
对象。
CPoint() throw();
CPoint(int initX, int initY) throw();
CPoint(POINT initPt) throw();
CPoint(SIZE initSize) throw();
CPoint(LPARAM dwPoint) throw();
参数
initX
指定 x
的 CPoint
成员的值。
initY
指定 y
的 CPoint
成员的值。
initPt
POINT
结构或 CPoint
(指定用来初始化 CPoint
的值)。
initSize
SIZE
结构或 CSize
(指定用来初始化 CPoint
的值)。
dwPoint
将 x
成员设置为 dwPoint
的低位字,并将 y
成员设置为 dwPoint
的高位字。
注解
如果未提供自变量,则 x
和 y
成员将设置为 0。
示例
CPoint ptTopLeft(0, 0);
// works from a POINT, too
POINT ptHere;
ptHere.x = 35;
ptHere.y = 95;
CPoint ptMFCHere(ptHere);
// works from a SIZE
SIZE sHowBig;
sHowBig.cx = 300;
sHowBig.cy = 10;
CPoint ptMFCBig(sHowBig);
// or from a DWORD
DWORD dwSize;
dwSize = MAKELONG(35, 95);
CPoint ptFromDouble(dwSize);
ASSERT(ptFromDouble == ptMFCHere);
CPoint::Offset
向 CPoint
的 x
和 y
成员添加值。
void Offset(int xOffset, int yOffset) throw();
void Offset(POINT point) throw();
void Offset(SIZE size) throw();
参数
xOffset
指定要让 CPoint
的 x
成员偏移的量。
yOffset
指定要让 CPoint
的 y
成员偏移的量。
point
指定要让 CPoint
偏移的量(POINT
或 CPoint
)。
size
指定要让 CPoint
偏移的量(SIZE
或 CSize
)。
示例
CPoint ptStart(100, 100);
ptStart.Offset(35, 35);
CPoint ptResult(135, 135);
ASSERT(ptStart == ptResult);
// works with POINT, too
ptStart = CPoint(100, 100);
POINT pt;
pt.x = 35;
pt.y = 35;
ptStart.Offset(pt);
ASSERT(ptStart == ptResult);
// works with SIZE, too
ptStart = CPoint(100, 100);
SIZE size;
size.cx = 35;
size.cy = 35;
ptStart.Offset(size);
ASSERT(ptStart == ptResult);
CPoint::operator ==
检查两个 POINT
是否相等。
BOOL operator==(POINT point) const throw();
参数
point
包含 POINT
结构或 CPoint
对象。
返回值
如果 POINT
相等,则为非零值;否则为 0。
示例
CPoint ptFirst(256, 128);
CPoint ptTest(256, 128);
ASSERT(ptFirst == ptTest);
// works with POINTs, too
POINT pt;
pt.x = 256;
pt.y = 128;
ASSERT(ptTest == pt);
// note that pt == ptTest isn't correct!
CPoint::operator !=
检查两个 POINT
是否不相等。
BOOL operator!=(POINT point) const throw();
参数
point
包含 POINT
结构或 CPoint
对象。
返回值
如果 POINT
不相等,则为非零值;否则为 0。
示例
CPoint ptFirst(256, 128);
CPoint ptTest(111, 333);
ASSERT(ptFirst != ptTest);
// works with POINTs, too
POINT pt;
pt.x = 333;
pt.y = 111;
ASSERT(ptTest != pt);
// note that pt != ptTest isn't correct!
CPoint::operator +=
第一个重载将 SIZE
加到 CPoint
。
void operator+=(SIZE size) throw();
void operator+=(POINT point) throw();
参数
备注
第二个重载将 POINT
加到 CPoint
。
在这两种情况下,加法的完成方式是将右侧操作数的 x
(或 cx
)成员加到 CPoint
的 x
成员,并将右侧操作数的 y
(或 cy
)成员加到 CPoint
的 y
成员。
例如,将 CPoint(5, -7)
加到一个包含 CPoint(30, 40)
的变量会将变量更改为 CPoint(35, 33)
。
示例
CPoint ptStart(100, 100);
CSize szOffset(35, 35);
ptStart += szOffset;
CPoint ptResult(135, 135);
ASSERT(ptResult == ptStart);
// also works on SIZE
ptStart = CPoint(100, 100);
SIZE sz;
sz.cx = 35;
sz.cy = 35;
ptStart += sz;
ASSERT(ptResult == ptStart);
CPoint::operator -=
第一个重载从 CPoint
中减去 SIZE
。
void operator-=(SIZE size) throw();
void operator-=(POINT point) throw();
参数
注解
第二个重载从 CPoint
中减去 POINT
。
在这两种情况下,减法的完成方式是将右侧操作数的 x
(或 cx
)成员从 CPoint
的 x
成员中减去,并将右侧操作数的 y
(或 cy
)成员从 CPoint
的 y
成员中减去。
例如,将 CPoint(5, -7)
从一个包含 CPoint(30, 40)
的变量中减去会将变量更改为 CPoint(25, 47)
。
示例
CPoint ptStart(100, 100);
CSize szOffset(35, 35);
ptStart -= szOffset;
CPoint ptResult(65, 65);
ASSERT(ptResult == ptStart);
// also works on SIZE
ptStart = CPoint(100, 100);
SIZE sz;
sz.cx = 35;
sz.cy = 35;
ptStart -= sz;
ASSERT(ptResult == ptStart);
CPoint::operator +
使用此运算符可让 CPoint
偏移一个 CPoint
或 CSize
对象,或让 CRect
偏移一个 CPoint
。
CPoint operator+(SIZE size) const throw();
CPoint operator+(POINT point) const throw();
CRect operator+(const RECT* lpRect) const throw();
参数
lpRect
包含一个指向 RECT
结构或 CRect
对象的指针。
返回值
一个偏移量为 SIZE
的 CPoint
、一个偏移量为 POINT
的 CPoint
,或者一个偏移量为 POINT
的 CRect
。
备注
例如,使用前两个重载之一让点 CPoint(25, -19)
偏移点 CPoint(15, 5)
或大小 CSize(15, 5)
的量会返回值 CPoint(40, -14)
。
将 CRect
加到 POINT
时,会返回偏移量为在 POINT
中指定的 x
和 y
值的 CRect
。 例如,使用最后一个重载,让矩形 CRect(125, 219, 325, 419)
偏移一个点 CPoint(25, -19)
的量,则会返回 CRect(150, 200, 350, 400)
。
示例
CPoint ptStart(100, 100);
CSize szOffset(35, 35);
CPoint ptEnd;
ptEnd = ptStart + szOffset;
CPoint ptResult(135, 135);
ASSERT(ptResult == ptEnd);
// also works on SIZE
ptStart = CPoint(100, 100);
SIZE sz;
sz.cx = 35;
sz.cy = 35;
ptEnd = ptStart + sz;
ASSERT(ptResult == ptEnd);
CPoint::operator -
使用前两个重载之一从 CPoint
中减去一个 CPoint
或 CSize
对象。
CSize operator-(POINT point) const throw();
CPoint operator-(SIZE size) const throw();
CRect operator-(const RECT* lpRect) const throw();
CPoint operator-() const throw();
参数
lpRect
一个指向 RECT
结构或 CRect
对象的指针。
返回值
一个 CSize
,它是两个 POINT
的差值;一个 CPoint
,其偏移量为 SIZE
的求反;一个 CRect
,其偏移量为 POINT
的求反;或者一个 CPoint
,为 POINT
的求反。
注解
第三个重载将 CRect
的偏移量设置为 CPoint
的求反。 最后,使用一元运算符对 CPoint
求反。
例如,使用第一个重载来查找 CPoint(25, -19)
和 CPoint(15, 5)
这两个点之间的差值会返回 CSize(10, -24)
。
从 CPoint
中减去 CSize
所做的计算与上面的相同,但返回一个 CPoint
对象,而不是一个 CSize
对象。 例如,使用第二个重载查找点 CPoint(25, -19)
与大小 CSize(15, 5)
之间的差值会返回 CPoint(10, -24)
。
从 POINT
中减去一个矩形会返回一个矩形,其偏移量为在 POINT
中指定的 x
和 y
值的求反。 例如,使用最后一个重载,让矩形 CRect(125, 200, 325, 400)
偏移点 CPoint(25, -19)
的量,则会返回 CRect(100, 219, 300, 419)
。
使用一元运算符对 POINT
求反。 例如,将一元运算符与点 CPoint(25, -19)
配合使用会返回 CPoint(-25, 19)
。
示例
// example for CPoint subtraction
CPoint ptStart(100, 100);
CSize szOffset(35, 35);
CPoint ptEnd;
ptEnd = ptStart - szOffset;
CPoint ptResult(65, 65);
ASSERT(ptResult == ptEnd);
// also works on SIZE
ptStart = CPoint(100, 100);
SIZE sz;
sz.cx = 35;
sz.cy = 35;
ptEnd = ptStart - sz;
ASSERT(ptResult == ptEnd);
// example for CPoint unary operator
CPoint pt(35, 35);
pt = -pt;
CPoint ptNeg(-35, -35);
ASSERT(pt == ptNeg);