CRect

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

在 传 递 LPRECT ,LPCRECT 或 RECT 结 构 作 为 参 数 的 任 何 地 方 , 都 可 以 传 递

CRect 对 象 来 代 替 。

注 意 这 个 类 是 从 tagRECT 结 构 派 生 而 来 的 。 ( tagRECT 是 RECT 结 构 的不 太 常 用 的 别 名 。 ) 这 意 味 着 RECT 结 构 的 数 据 成 员 ( left , top , right , 和 bottom ) 也 是 CRect 的 可 访 问 数 据 成 员 。

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

当 指 定 一 个 CRect 时 , 必 须 谨 慎 地 构 造 它 , 以 使 它 符 合 规 范 – – – 也 就 是 说 , 使其 左 坐 标 值 小 于 右 坐 标 值 , 使 顶 坐 标 值 小 于 底 坐 标 值 。 例 如 , 左 上 角 为 ( 10 , 10 ) , 右 下 角 为 ( 20 , 20 ) 就 定 义 了 一 个 符 合 规 范 的 矩 形 , 但 是 左 上 角 为 ( 20 ,

20 ) 而 右 下 角 为 ( 10 , 10 ) 的 值 就 定 义 了 一 个 不 符 合 规 范 的 矩 形 。 如 果 矩 形 是不 符 合 规 范 的 , 则 CRect 的 许 多 成 员 函 数 都 会 符 合 不 正 确 的 结 果 。 ( 参 见CRect ::NormalizeRect 可 以 得 到 这 些 函 数 的 列 表 。 ) 在 你 调 用 一 个 要 求 符 合 规 范的 矩 形 的 函 数 之 前 , 你 可 以 通 过 调 用 N o rmalizeRect 函 数 来 使 不 符 合 规 范 的 矩形 成 为 符 合 规 范 的 矩 形 。

当 用 成 员 函 数 CDC::DPtoLP 和 CDC::LPtoDP 来 处 理 CRect 时 要 小 心 。 如 果 显示 环 境 的 映 射 模 式 y-extent 是 负 的 , 就 像 在 MM_LOENGLISH 中 一 样 , 则CDC ::DPtoLP 将 转 换 CRect , 以 使 它 的 顶 部 坐 标 大 于 底 部 坐 标 。 然 后 像 Height 和 Size 这 样 的 函 数 将 返 回 负 值 作 为 转 换 后 的 矩 形 的 高 度 , 则 此 矩 形 将 是 不 符 合

规 范 的 。

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

include < afxwin.h >

请 参 阅 CPoint , CSize , RECT

CRect 类 成 员

构 造

Crect 构 造 一 个 Crect 对 象

运 算

W idth

计 算

CRect 的 宽 度

Height

计 算

CRect 的 高 度

Size

计 算

CRect 的 大 小

续 表

TopLeft 返 回 CRect 的 左 上 角 点

BottomRigh 返 回 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 的 高 度 和 宽 度 返 回 规 范O ffsetRect 将 CRect 移 动 到 指 定 的 偏 移

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

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

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

运 算 符

Operator LPCRECT 将 一 个 CRect 转 换 为 一 个 LPCRECT Operator LPRECT 将 一 个 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

对 象

O perator & 创 建 CRect 与 某 个 矩 形 的 交 ,并 返 回 得 到 的 CRect

对 象

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

对 象

成 员 函 数

CRect::BottomRight

CPoint& BottomRight( );

const CPoint& BottomRight( ) const;

返 回 值

返 回 矩 形 的 右 下 角 点 的 坐 标 。

说 明

返 回 的 右 下 角 坐 标 是 一 个 指 向 CPoint 对 象 的 引 用 ,该 对 象 包 含 在 CRect 对 象 中 。

可 以 使 用 这 个 函 数 来 获 取 或 设 置 矩 形 的 右 下 角 坐 标 。 要 用 这 个 函 数 来 设 置 右 下角 。 可 以 将 此 函 数 放 在 赋 值 操 作 符 的 左 边 。

请 参 阅 CRect::TopLeft, CPoint, CRect::CenterPoint

CRect::CenterPoint CPoint CenterPoint() const; 返 回 值

返 回 一 个 CPoint 对 象 , 该 对 象 是 CRect 的 中 心 点 。

说 明

要 计 算 CRect 的 中 心 点 , 将 其 左 、 右 坐 标 值 相 加 再 除 2 , 将 其 上 、 下 值 相 加 再除 2 。

请 参 阅 CRect::Width, CRect::Height, CRect::Size, CRect::TopLeft,

CRect::BottomRight,

CRect::IsRectNull, CPoint

CRect::CopyRect

void CopyRect( LPCRECT lpSrcRect );

参 数

lpSrcRect

指 向 要 拷 贝 的 RECT 结 构 或 CRect 对 象 的 指 针 。

说 明

此 成 员 函 数 用 来 将 lpSrcRect 矩 形 拷 贝 到 CRect 中。

请 参 阅 CRect::CRect, CRect::operator =, CRect::SetRect, CRect::SetRectEmpty

CRect::CRect

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

指定 CRect 的 左 边 位 置 。

t

指定 CRect 的 上 边 位 置 。

r

指定 CRect 的 右 边 位 置 。

b

指定 CRect 的 底 部 位 置 。

srcRect

对 指 定 的 CRect 对 象 的 坐 标 的 RECT 结 构 的 引 用 。

lpSrcRect

指 向 给 定 的 CRect 对 象 的 坐 标 的 RECT 结 构 。

point

指 定 要 构 造 的 矩 形 的 原 点 。 该 参 数 值 对 应 于 矩 形 的 左 上 角 。

size

指 定 要 构 造 的 矩 形 的 从 左 上 角 到 右 下 角 的 偏 移 量 。

topLeft

指定 CRect 的 左 上 角 位 置 。

bottomRight

指定 CRect 的 右 下 角 位 置 。

说 明

此 成 员 函 数 用 来 构 造 一 个 CRect 对 象 。如 果 没 有 给 出 参 数 ,则 不 初 始 化 left,top , righ t, 和 bottom 成 员 。

CRect(const RECT& )和 CRect( LP RECT ) 构 造 函 数 指 向 一 个 CopyRect 。 其 它 的 构造 函 数 直 接 初 始 化 对 象 的 成 员 变 量 。

请 参 阅 CRect::SetRect, CRect::CopyRect, CRect::operator =, CRect::SetRectEmpty

CRect::DeflateRect

void DeflateRect( int x , int y ); void DeflateRect( SIZE size );

void DeflateRect( LPCRECT lpRect );

void DeflateRect( int l , int t , int r , int b );

参 数

x

指 定 缩 小 CRect 的 左 和 右 边 的 单 位 数 。

y

指 定 缩 小 CRect 的 上 、 下 边 的 单 位 数 。

size

一 个 指 定 缩 小 CRect 的 单 位 数 的 SIZE 或 CSize 。 cx 值 指 定 缩 小 左 、 右 边的 单 位 数 , cy` ` 指 定 缩 小 上 、 下 边 的 单 位 数 。

lpRect

指 向 一 个 RECT 结 构 或 CRect , 指 定 缩 小 每 一 边 的 单 位 数 。

l

指 定 缩 小 CRect 左 边 的 单 位 数 。

t

指 定 缩 小 CRect 上 边 的 单 位 数 。

r

指 定 缩 小 CRect 右 边 的 单 位 数 。

b

指 定 缩 小 CRect 下 边 的 单 位 数 。

DeflateRect 通 过 将 CRect 的 边 向 其 中 心 移 动 来 缩 小 它 。 为 了 做 到 这 一 点 , DeflateRect 将 单 位 数 增 加 到 矩 形 的 左 边 和 上 边 , 从 右 边 和 下 边 减 去 单 位 数 。DeflateRect 的 参 数 是 有 符 号 的 值 ; 正 值 缩 小 CRect , 而 负 值 则 放 大 它 。

前 两 个 重 载 函 数 使 CRect 相 对 的 两 对 边 都 缩 小 , 因 此 CRect 的 总 宽 度 减 小 了 两倍 x ( 或 cx ) , 总 高 度 减 小 了 两 倍 y ( 或 cy ) 。 其 它 两 个 重 载 函 数 使 CRect 的边 相 对 独 立 的 缩 小 。

请 参 阅 CRect::InflateRect, CRect::operator -, CRect::operator -=, ::InflateRect

CRect::EqualRect

BOOL EqualRect( LPCRECT lpRect ) const;

如 果 两 个 矩 形 具 有 相 同 的 上 、 左 、 下 、 右 边 值 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

注 意 两 个 矩 形 都 必 须 是 符 合 规 范 的 , 否 则 此 函 数 将 失 败 。 你 可 以 在 调用 此 函 数 之 前 , 调 用 NormalizeRect 来 使 矩 形 规 范 化 。

参 数

lpRect

指 向 一 个 RECT 结 构 或 CRect 对 象 , 该 对 象 或 结 构 包 含 了 一 个 矩 形 的 左上 角 和 右 下 角 的 坐 标 。

请 参 阅 CRect::operator ==, CRect::operator !=, CRect::NormalizeRect, ::EqualRect

int Height() const;

返 回 值

返 回 CRect 的 高 度 。

说 明

此 成 员 函 数 通 过 从 CRect 的 下 边 值 中 减 去 上 边 值 来 计 算 CRect 的 高 度 。 结 果 值可 以 是 负 数 。

注 意 这 个 矩 形 必 须 是 符 合 规 范 的 , 否 则 此 函 数 将 失 败 。 你 可 以 在 调 用此 函 数 之 前 , 调 用 NormalizeRect 来 使 矩 形 规 范 化 。

请 参 阅 CRect::Width, CRect::Size, CRect::CenterPoint, CRect::IsRectEmpty, CRect::IsRectNull, CRect::NormalizeRect

void InflateRect( int x , int y ); void InflateRect( SIZE size );

void InflateRect( LPCRECT lpRect ); void InflateRect( int l , int t , int r , int b );

参 数

x

指 定 扩 大 CRect 左 和 右 边 的 单 位 数 。

y

指 定 扩 大 CRect 上 、 下 边 的 单 位 数 。

size

一 个 指 定 扩 大 CRect 的 单 位 数 的 SIZE 或 CSize 。 cx 值 指 定 扩 大 左 、 右 边的 单 位 数 , cy 指 定 扩 大 上 、 下 边 的 单 位 数 。

lpRect

指 向 一 个 RECT 结 构 或 CRect , 指 定 扩 大 每 一 边 的 单 位 数 。

l

指 定 扩 大 CRect 左 边 的 单 位 数 。

t

指 定 扩 大 CRect 上 边 的 单 位 数 。

r

指 定 扩 大 CRect 右 边 的 单 位 数 。

b

指 定 扩 大 CRect 下 边 的 单 位 数 。

说 明

InflateRect 通 过 将 CRect 的 边 向 远 离 其 中 心 的 方 向 移 动 来 扩 大 它 。 为 了 做 到 这一 点 , In flateRect 从 矩 形 的 左 边 和 上 边 减 去 单 位 数 , 将 单 位 数 增 加 到 右 边 和 下

边 。 In flateRect 的 参 数 是 有 符 号 的 值 ; 正 值 扩 大 CRec t, 而 负 值 则 缩 小 它 。

前 两 个 重 载 函 数 使 CRect 相 对 的 两 对 边 都 扩 大 , 因 此 CRect 的 总 宽 度 增 加 了 了两 倍 x ( 或 cx ) , 总 高 度 增 加 了 两 倍 y ( 或 cy ) 。 其 它 两 个 重 载 函 数 使 CRect 的 边 则 是 相 对 独 立 的 扩 大 。

请 参 阅 CRect::DeflateRect, CRect::operator +, CRect::operator +=, ::InflateRect

CRect::IntersectRect

BOOL IntersertRect ( LPCRECT lpRect1 , LPCRECT lpRect2 );

返 回 值

如 果 交 不 为 空 , 则 返 回 非 零 值 ; 否 则 , 如 果 交 为 空 则 返 回 0 。

参 数

lpRect1

指 向 一 个 RECT 结 构 或 CRect 对 象 , 该 对 象 或 结 构 包 含 了 一 个 源 矩 形 。

lpRect2

指 向 一 个 RECT 结 构 或 CRect 对 象 , 该 对 象 或 结 构 包 含 了 一 个 源 矩 形 。

说 明

此 函 数 使 CRect 等 于 两 个 现 有 矩 形 的 交 。 交 是 同 时 包 含 在 两 个 现 有 矩 形 中 的 最大 矩 形 。

注 意 两 个 矩 形 都 必 须 是 符 合 规 范 的 , 否 则 此 函 数 将 失 败 。 你 可 以 在 调用 此 函 数 之 前 , 调 用 NormalizeRect 来 使 矩 形 规 范 化 。

请 参 阅 CRect::operator &=, CRect::operator &, CRect::UnionRect,

CRect::SubtractRect,

CRect::NormalizeRect, ::IntersectRect

CRect::IsRectEmpty BOOL IsRectEmpty() const; 返 回 值

如 果 CRect 是 空 的 则 返 回 非 零 值 ; 否 则 , 如 果 CRect 不 是 空 的 则 返 回 0 。

说 明

此 函 数 用 来 确 定 CRect 是 否 是 空 的 。如 果 一 个 矩 形 的 宽 度 和 /或 高 度 是 0 或 负 值 , 则 称 这 个 矩 形 为 空 的 。 与 IsRectNull 不 同 , IsRectNull 用 来 确 定 是 否 矩 形 的 所有 坐 标 都 是 零 。

注 意 这 个 矩 形 必 须 是 符 合 规 范 的 , 否 则 此 函 数 将 失 败 。 你 可 以 在 调 用

此 函 数 之 前 , 调 用 NormalizeRect 来 使 矩 形 规 范 化 。

请 参 阅 CRect::IsRectNull, CRect::SetRectEmpty, CRect::NormalizeRect, ::IsRectEmpty

CRect::IsRectNull BOOL IsRectNull() const; 返 回 值

如 果 CRect 的 上 、 左 、 下 和 右 边 的 值 都 等 于 0 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

说 明

此 函 数 用 来 确 定 CRect 的 上 、 左 、 下 和 右 边 的 值 是 否 都 等 于 0 。 与 IsRectEmpty

不 同 , IsRectEmpty 用 来 确 定 矩 形 是 否 为 空 。

请 参 阅 CRect::IsRectEmpty, CRect::SetRectEmpty

CRect::NormalizeRect void NormalizeRect( ); 说 明

此 函 数 用 来 使 CRect 符 合 规 范 , 使 其 高 度 和 宽 度 均 为 正 值 。 矩 形 被 从 四 个 象 限规 范 化 , 通 常 这 四 个 象 限 就 是 W indows 用 来 确 定 坐 标 的 。 NormalizeRect 比 较上 、 下 坐 标 的 值 , 如 果 上 坐 标 值 大 于 下 坐 标 的 值 , 则 将 它 们 互 换 。 类 似 的 , 如果 左 坐 标 的 值 大 于 右 坐 标 的 值 , 则 将 左 、 右 坐 标 互 换 。 当 处 理 不 同 的 映 射 模 式和 转 化 的 矩 形 时 , 这 个 函 数 是 很 有 用 的 。

注 意 下 面 的 CRect 成 员 函 数 为 了 正 确 地 工 作 , 需 要 规 范 化 的 矩 形 , 它们 是 : Height , Width , Size , IsRectEmpty , PtInRect , EqualRect ,

UnionRect , IntersectRect, SubtractRect , operator == , operator != , operator | , operator |=, operator & , 和 operator &= 。

CRect:: OffsetRect

void OffsetRect( int x , int y ); void OffsetRect( POINT point ); void OffsetRect( SIZE size );

参 数

x

指 定 要 往 左 或 右 移 动 的 数 量 。 要 往 左 时 此 值 必 须 是 负 值 。

y

指 定 要 往 上 或 下 移 动 的 数 量 。 要 往 上 时 此 值 必 须 是 负 值 。

point

包 含 一 个 POINT 结 构 或 CPoint 对 象 , 该 结 构 或 对 象 指 定 了 要 移 动 的 尺 寸 。

size

包 含 一 个 SIZE 结 构 或 CSize 对 象 , 指 定 要 移 动 的 尺 寸 。

说 明

此 函 数 用 来 将 CRect 移 动 指 定 的 偏 移 量 。 将 CRect 沿 x 轴 移 动 x 个 单 位 , 沿 y 轴 移 动 y 个 单 位 。 x 和 y 参 数 都 是 有 符 号 的 值 , 因 此 CRect 可 以 向 左 或 向 右 , 向 上 或 向 下 移 动 。

请 参 阅 CRect::operator +, CRect::operator +=, CRect::operator -, CRect::operator -