类似于 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);