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 -