CPoint

类似于 Windows POINT 结构。

语法

class CPoint : public tagPOINT

成员

公共构造函数

名称 描述
CPoint::CPoint 构造一个 CPoint

公共方法

名称 描述
CPoint::Offset CPointxy 成员添加值。

公共运算符

“属性” 描述
CPoint::operator - 返回 CPointSIZE 的差值,或 POINT 的求反,或两个 POINT 之间的 CSize 差值,或负 SIZE 导致的偏移量。
CPoint::operator != 检查两个 POINT 是否不相等。
CPoint::operator + 返回 CPointSIZEPOINT 的总和,或 SIZE 导致的 CRect 偏移量。
CPoint::operator += 通过加 SIZEPOINT 导致的 CPoint 偏移量。
CPoint::operator -= 通过减 SIZEPOINT 导致的 CPoint 偏移量。
CPoint::operator == 检查两个 POINT 是否相等。

备注

它还包括用于操作 CPointPOINT 结构的成员函数。

无论在何处使用 POINT 结构,都可以使用 CPoint 对象。 与 SIZE 交互的这个类的运算符接受 CSize 对象或 SIZE 结构,因为两者是可互换的。

注意

此类派生自 tagPOINT 结构。 (名称 tagPOINTPOINT 结构的一个不太常用的名称。)这意味着 POINT 结构的数据成员 xyCPoint 的可访问数据成员。

注意

有关共享实用工具类(例如 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
指定 xCPoint 成员的值。

initY
指定 yCPoint 成员的值。

initPt
POINT 结构或 CPoint(指定用来初始化 CPoint 的值)。

initSize
SIZE 结构或 CSize(指定用来初始化 CPoint 的值)。

dwPoint
x 成员设置为 dwPoint 的低位字,并将 y 成员设置为 dwPoint 的高位字。

注解

如果未提供自变量,则 xy 成员将设置为 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

CPointxy 成员添加值。

void Offset(int xOffset, int yOffset) throw();
void Offset(POINT point) throw();
void Offset(SIZE size) throw();

参数

xOffset
指定要让 CPointx 成员偏移的量。

yOffset
指定要让 CPointy 成员偏移的量。

point
指定要让 CPoint 偏移的量(POINTCPoint)。

size
指定要让 CPoint 偏移的量(SIZECSize)。

示例

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();

参数

size
包含 SIZE 结构或 CSize 对象。

point
包含 POINT 结构或 CPoint 对象。

备注

第二个重载将 POINT 加到 CPoint

在这两种情况下,加法的完成方式是将右侧操作数的 x(或 cx)成员加到 CPointx 成员,并将右侧操作数的 y(或 cy)成员加到 CPointy 成员。

例如,将 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();

参数

size
包含 SIZE 结构或 CSize 对象。

point
包含 POINT 结构或 CPoint 对象。

注解

第二个重载从 CPoint 中减去 POINT

在这两种情况下,减法的完成方式是将右侧操作数的 x(或 cx)成员从 CPointx 成员中减去,并将右侧操作数的 y(或 cy)成员从 CPointy 成员中减去。

例如,将 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 偏移一个 CPointCSize 对象,或让 CRect 偏移一个 CPoint

CPoint operator+(SIZE size) const throw();
CPoint operator+(POINT point) const throw();
CRect operator+(const RECT* lpRect) const throw();

参数

size
包含 SIZE 结构或 CSize 对象。

point
包含 POINT 结构或 CPoint 对象。

lpRect
包含一个指向 RECT 结构或 CRect 对象的指针。

返回值

一个偏移量为 SIZECPoint、一个偏移量为 POINTCPoint,或者一个偏移量为 POINTCRect

备注

例如,使用前两个重载之一让点 CPoint(25, -19) 偏移点 CPoint(15, 5) 或大小 CSize(15, 5) 的量会返回值 CPoint(40, -14)

CRect 加到 POINT 时,会返回偏移量为在 POINT 中指定的 xy 值的 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 中减去一个 CPointCSize 对象。

CSize operator-(POINT point) const throw();
CPoint operator-(SIZE size) const throw();
CRect operator-(const RECT* lpRect) const throw();
CPoint operator-() const throw();

参数

point
POINT 结构或 CPoint 对象。

size
SIZE 结构或 CSize 对象。

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 中指定的 xy 值的求反。 例如,使用最后一个重载,让矩形 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);   

另请参阅

MFC 示例 MDI
层次结构图
POINT 结构
CRect
CSize