CRectTracker

CRectTracker 没 有 基 类 。

CRectTracker 类 允 许 一 个 项 被 显 示 , 移 动 , 以 不 同 的 方 式 改 变 大 小 。 虽 然CRectTracker 类 是 设 计 来 支 持 用 户 以 图 形 化 界 面 与 OLE 项 交 互 的 , 但 是 它 的 使用 不 仅 限 于 支 持 OLE 的 应 用 程 序 。 它 可 以 使 用 在 任 何 需 要 用 户 界 面 的 地 方 。

CRectTracker 的 边 框 可 以 是 实 线 , 也 可 以 是 点 线 。 可 给 予 项 一 种 阴 影 式 边 框 或用 一 种 阴 影 样 式 覆 盖 项 , 用 来 指 示 项 的 不 同 状 态 。 你 可 以 在 项 的 外 界 或 内 部 放置 八 个 调 整 大 小 把 手 。( 有 关 八 个 调 整 大 小 把 手 的 解 释 ,参 见 GetHandleMask 。) 最 后 , 一 个 CRectTracker 允 许 你 在 调 整 项 的 大 小 时 改 变 项 的 方 向 。

要 使 用 CRectTracke r, 首 先 要 构 造 一 个 CRectTracker 对 象 , 并 指 定 用 哪 种 显 示状 态 来 初 始 化 。 然 后 , 应 用 程 序 就 可 以 使 用 这 个 界 面 , 提 供 给 用 户 有 关 与

CRectTracker 对 象 相 关 联 的 OLE 项 当 前 状 态 的 直 观 反 馈 了 。

#include <afxext.h>

请 参 阅 COleResizeBar, CRect, CRectTracker::GetHandleMask

CRectTracker 类 成 员

Data Members

m_nHandleSize 确 定 调 整 大 小 把 手 的 尺 寸

m_rect 矩 形 的 以 像 素 表 示 的 当 前 位 置

m_sizeMin 确 定 矩 形 宽 度 和 高 度 的 最 小 值

m_nStyle 跟 踪 器 的 当 前 风 格

Construction

CrectTracker 构 造 一 个 CRectTracker 对象

Operations

D raw 显 示 矩 形

续 表

GetTrueRect 返 回 矩 形 的 宽 度 和 高 度 , 包 括 改 变 大 小 句 柄

HitTest 返 回 与 CRectTracker 对 象 关 联 的 光 标 的 当 前 位 置

NormalizeHit 规 范 化 一 个 单 击 测 试 代 码

SetCursor 根 据 光 标 在 矩 形 上 方 的 位 置 来 设 置 光 标

Track 支 持 用 户 操 作 矩 形

TrackRubberBand 支 持 用 户 “ 橡 皮 筋 ” 似 的 拉 伸 选 择

Overridable s AdjustRect 当 矩 形 被 改 变 大 小 时 此 函 数 被 调 用

D rawTrackerRect 当 画 一 个 CRectTracker 对 象 的 边 框 时 此 函 数 被 调

OnChangedRect 当 矩 形 被 改 变 大 小 或 被 移 动 时 , 此 函 数 被 调 用

GetHandleMask 调 用 此 函 数 来 获 得 一 个 CRectTracker 项 的 调 整 大

小 把 手 的 掩 码

成 员 函 数

CRectTracker::AdjustRect

virtual void AdjustRect( int nHandle , LPRECT lpRect );

参 数

nHandle

所 使 用 的 句 柄 的 索 引 。

lpRect

指 向 矩 形 的 当 前 尺 寸 的 指 针 。 ( 矩 形 的 尺 寸 由 它 的 高 度 和 宽 度 给 出 。 )

说 明

当 通 过 使 用 调 整 大 小 把 手 来 改 变 跟 踪 矩 形 的 大 小 时 , 框 架 调 用 此 成 员 函 数 。 只

有 当 用 允 许 反 转 的 形 式 来 调 用 Track 和 TrackRubberBand 时 , 这 个 函 数 的 缺 省行 为 才 允 许 改 变 矩 形 的 方 向 。

可 以 重 载 这 个 函 数 来 控 制 在 一 次 拖 动 操 作 期 间 对 跟 踪 矩 形 进 行 调 整 。 一 种 方 法就 是 在 返 回 之 前 调 整 由 lpRect 指 定 的 坐 标 。

特 殊 的 特 征 , 如 对 齐 至 网 格 或 保 持 长 宽 比 例 , 不 是 由 CRectTracker 直 接 支 持 的 , 可 以 重 载 这 个 函 数 来 实 现 。

请 参 阅 CRectTracker::Track, CRectTracker::TrackRubberBand, CRectTracker::OnChangedRect

CRectTracker::CRectTracker

CRectTracker( );

CRectTracker( LPCRECT lpSrcRect , UINT nStyle );

lpSrcRect

矩 形 对 象 的 坐 标 。

nStyle

指 定 CRectTracker 对 象 的 风 格 。 下 面 的 风 格 都 是 被 支 持 的 :

  • CRectTracker::solidLine 矩 形 的 边 框 用 实 线 。

  • CRectTracker::dottedLine 矩 形 的 边 框 用 点 线 。

  • CRectTracker::hatchedBorder 矩 形 的 边 框 用 阴 影 模 式 。

  • CRectTracker::resizeInside 调 整 大 小 把 手 位 于 矩 形 的 内 部 。

  • CRectTracker::resizeOutside 调 整 大 小 把 手 位 于 矩 形 的 外 界

  • CRectTracker::hatchInside 整 个 矩 形 都 覆 盖 了 阴 影 模 式 。

此 成 员 函 数 用 来 创 建 并 初 始 化 一 个 CRectTracker 对 象 。

缺 省 的 构 造 函 数 用 lpSrcRect 的 值 来 初 始 化 CRectTracker 对 象 , 并 将 其 它 的 尺寸 初 始 化 为 系 统 的 缺 省 值 。如 果 该 对 象 创 建 时 没 有 使 用 参 数 ,则 不 初 始 化 m_rect 和 m_nStyle 数 据 成 员 。

请 参 阅 CRect::CRect

CRectTracker::Draw

void Draw( CDC* pDC ) const;

参 数

pDC

指 向 绘 制 所 用 的 设 备 环 境 的 指 针 。

此 成 员 函 数 用 来 绘 制 矩 形 的 轮 廓 线 和 内 部 区 域 。 跟 踪 器 矩 形 的 风 格 决 定 了 如 何进 行 绘 制 。 参 见 CRectTracker 的 构 造 函 数 , 可 以 获 得 有 关 可 用 风 格 的 更 多 信 息 。

请 参 阅 CRectTracker::DrawTrackerRect, CRectTracker::CRectTracker, CRect::NormalizeRect

CRectTracker::DrawTrackerRect

virtual void DrawTrackerRect( LPCRECT lpRec t, CWnd* pWndClipTo , CDC* pDC , CWnd* pWnd );

参 数

lpRect

指 向 包 含 要 绘 制 的 矩 形 的 RECT 的 指 针 。

pWndClipTo

指 向 窗 口 的 指 针 , 该 窗 口 用 于 剪 贴 矩 形 。

pDC

指 向 用 于 绘 制 的 设 备 环 境 的 指 针 。

pWnd

指 向 窗 口 的 指 针 , 绘 制 将 在 此 窗 口 中 发 生 。

说 明

在 Track 或 TrackRubberBand 成 员 函 数 内 , 无 论 何 时 跟 踪 矩 形 的 位 置 发 生 改 变 , 框 架 都 将 调 用 此 成 员 函 数 。 此 成 员 函 数 的 缺 省 实 现 调 用 了 CDC::DrawFo c usRect 函 数 , 该 函 数 用 来 绘 制 一 个 打 点 矩 形 。

重 载 这 个 函 数 , 可 以 实 现 在 跟 踪 期 间 提 供 不 同 的 反 馈 。

请 参 阅 C RectTracker::Track, CRectTracker::TrackRubberBand, CDC ::DrawFocusRect

CRectTracker::GetHandleMask virtual UINT GetHandleMask( ) const; 返 回 值

返 回 一 个 CRectTracker 项 的 调 整 大 小 把 手 的 掩 码 。

说 明

框 架 调 用 此 成 员 函 数 来 获 取 一 个 矩 形 的 调 整 大 小 把 手 的 掩 码 。

调 整 大 小 把 手 形 式 在 矩 形 的 边 和 角 上 , 用 来 让 用 户 控 制 矩 形 的 形 状 和 尺 寸 。

每 个 矩 形 由 8 个 调 整 大 小 把 手 , 标 号 为 0 - 7 。 每 一 个 调 整 大 小 把 手 由 掩 码 中 的一 位 代 表 ; 该 位 的 值 是 2^n , 这 里 的 n 是 调 整 大 小 把 手 号 。 位 0 - 3 对 应 于 角 上的 调 整 大 小 把 手 , 从 左 上 角 开 始 , 按 顺 时 针 方 向 转 。 位 4 - 7 对 应 于 边 上 的 调

CRectTracker - 图1整 大 小 把 手 , 从 上 边 开 始 , 按 顺 时 针 方 向 转 。 下 面 的 图 例 说 明 了 一 个 矩 形 的 调整 大 小 把 手 和 它 们 对 应 的 调 整 大 小 把 手 号 和 值 :

GetHandleMask 的 缺 省 实 现 返 回 位 的 掩 码 , 以 显 示 调 整 大 小 把 手 。 如 果 某 一 单个 的 位 有 效 , 则 将 绘 制 相 应 的 调 整 大 小 把 手 。

重 载 这 个 函 数 , 可 以 实 现 隐 藏 或 显 示 指 定 的 句 柄 。

CRectTracker::GetTrueRect

void GetTrueRect( LPRECT lpTrueRect ) const;

参 数

lpTrueRect

指向 RECT 结 构 的 指 针 , 该 结 构 将 包 含 CRectTracker 对 象 的 设 备 坐 标 。

说 明

此 成 员 函 数 用 来 获 取 矩 形 的 坐 标 。 矩 形 的 尺 寸 包 括 位 于 外 边 框 上 的 任 何 调 整 大小 把 手 的 高 度 和 宽 度 。 当 函 数 返 回 时 , *lpTrueRect 总 是 一 个 用 设 备 坐 标 表 示 的规 范 矩 形 。

CRectTracker::HitTest

int HitTest( CPoint point ) const;

返 回 值

返 回 的 值 取 决 于 CRectTracker::TrackerHit 枚 举 类 型 , 可 以 是 下 列 值 之 一 :

  • CRectTracker::hitNothing -1

  • C RectTracker::hitTopLeft 0

  • C RectTracker::hitTopRight 1

  • C RectTracker::hitBottomRight 2

  • C RectTracker:hitBottomLeft 3

  • C RectTracker:hitTop 4

  • C RectTracker:hitRight 5

  • C RectTracker:hitBottom 6

  • C RectTracker:hitLeft 7

  • C RectTracker:hitMiddle 8

point

以 设 备 坐 标 表 示 的 要 测 试 的 点 。

说 明

此 成 员 函 数 用 来 检 查 用 户 是 否 已 经 捕 获 一 个 调 整 大 小 把 手 。

请 参 阅 C RectTracker::NormalizeHit, CRectTracker::SetCursor

CRectTracker::NomalizeHit

int NormalizeHit( int nHandle ) const;

返 回 值

返 回 规 范 化 句 柄 的 索 引 。

nHandle

标 识 用 户 选 择 的 句 柄 。

说 明

此 函 数 用 于 转 换 潜 在 的 翻 转 句 柄 。

当 在 允 许 反 转 的 情 况 下 调 用 CRectTracker::Track 或CRectTracker::TrackRubberBand 时 , 矩 形 有 可 能 按 x 轴 , y 轴 或 两 个 轴 进 行 反转 。 当 这 种 情 况 发 生 时 , HitTest 将 返 回 也 相 对 于 矩 形 而 反 转 了 的 句 柄 。 这 不 适用 于 绘 制 光 标 反 馈 , 因 为 反 馈 取 决 于 矩 形 的 屏 幕 位 置 , 而 不 是 矩 形 数 据 结 构 中将 要 被 修 改 的 部 分 。

请 参 阅 CRectTracker::HitTest, CRectTracker::Track,

CRectTracker::TrackRubberBand

CRectTracker::OnChangeRect

virtual void OnChangedRect( const CRect& rectOld );

参 数

rectOld

包含 CRectTracker 对 象 的 旧 设 备 坐 标 。

说 明

在 调 用 Track 期 间 , 无 论 何 时 跟 踪 矩 形 发 生 变 化 , 框 架 都 将 调 用 OnChangedRect 函 数 。 在 调 用 该 函 数 时 , 所 有 用 DrawTrackerRect 绘 制 的 反 馈 都 已 经 被 删 除 。此 函 数 的 缺 省 实 现 不 做 任 何 事 情 。

当 你 希 望 在 矩 形 改 变 大 小 后 执 行 某 些 动 作 时 , 你 可 以 重 载 这 个 函 数 。

请 参 阅 CRectTracker::AdjustRect, CRectTracker::Track, CRectTracker::TrackRubberBand

CRectTracker:: SetCursor

BOOL SetCursor( CWnd* pWnd , UINT nHitTest ) const;

返 回 值

如 果 前 一 次 单 击 是 在 跟 踪 矩 形 的 上 方 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pWnd

指 向 当 前 包 含 光 标 的 窗 口 。

nHitTest

前 一 次 单 击 测 试 的 结 果 , 从 W M _SETCURSOR 消 息 返 回 。

说 明

当 光 标 处 于 CRectTracker 对 象 的 区 域 上 方 时 ,此 成 员 函 数 用 来 改 变 光 标 的 形 状 。从 处 理 WM_SETCURSOR 消 息 的 窗 口 函 数 ( 通 常 是 OnSetCursor ) 内 调 用 此SetCursor 函 数 。

请 参 阅 CRectTracker::NormalizeHit, CRectTracker::HitTest, C W inApp::LoadCursor,

CWnd::OnSetCursor

CRectTracker::Track

BOOL Track( CWnd* pWnd , CPoint poin t, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL );

返 回 值

如 果 按 下 的 是 ESC 键 , 则 跟 踪 过 程 停 止 , 跟 踪 矩 形 内 存 储 的 矩 形 不 变 , 并 且 返

回 0 。 如 果 通 过 移 动 鼠 标 并 释 放 鼠 标 按 钮 将 改 变 提 交 , 则 新 的 位 置 和 /或 大 小 被记 录 在 跟 踪 矩 形 内 , 并 且 返 回 一 个 非 零 值 。

参 数

pWnd

包 含 矩 形 的 窗 口 对 象 。

point

当 前 鼠 标 位 置 相 对 于 客 户 区 的 鼠 标 坐 标 。

bAllowInvert

如 果 此 参 数 为 TRUE , 则 矩 形 可 沿 x 轴 , 或 y 轴 反 转 ; 否 则 , 此 参 数 为

FALSE 。

pWndClipTo

绘 制 操 作 将 要 被 剪 贴 到 的 窗 口 。 如 果 该 参 数 为 NULL , 则 pWnd 用 作 剪 贴

矩 形 。

说 明

此 成 员 函 数 显 示 用 于 改 变 矩 形 大 小 的 用 户 界 面 。 它 通 常 从 应 用 程 序 中 处 理

WM_LBUTTONDOWN 消 息 的 函 数 ( 一 般 是 OnLButtonDown ) 中 调 用 。

这 个 函 数 将 捕 捉 鼠 标 , 直 到 用 户 释 放 鼠 标 左 按 钮 , 单 击 ESC 键 , 或 单 击 鼠 标 右按 钮 。 当 用 户 移 动 鼠 标 光 标 时 , 反 馈 由 调 用 DrawTracderRect 和 OnChange d Rect 来 更 新 。

如 果 bAllowInvert 时 TRUE , 则 跟 踪 矩 形 可 以 沿 x 轴 或 y 轴 反 转 。

请 参 阅 C RectTracker::DrawTrackerRect, CRectTracker::OnChangedRect, CRectTracker::CRectTracker, CRectTracker::TrackRubberBand

CRectTracker::TrackRubberBand

BOOL TrackRubberBand( CWnd* pWnd , CPoint poin t, BOOL bAllowInvert = TRUE );

返 回 值

如 果 鼠 标 被 移 动 并 且 矩 形 不 是 空 的 , 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

pWnd

包 含 矩 形 的 窗 口 对 象 。

point

当 前 鼠 标 相 对 于 客 户 区 的 设 备 坐 标 。

bAllowInvert

如 果 是 TRUE , 则 矩 形 可 以 沿 x 轴或 y 轴 反 转 ; 否 则 , 其 值 就 是 FALSE 。

说 明

此 成 员 函 数 用 来 进 行 “ 橡 皮 筋 似 ” 选 择 。 它 通 常 从 处 理 WM_LBUTTONDOWN

消 息 的 应 用 程 序 函 数 ( 一 般 时 OnLButtonDow n) 中 调 用 。

这 个 函 数 将 捕 捉 鼠 标 , 直 到 用 户 释 放 鼠 标 左 按 钮 , 单 击 ESC 键 , 或 单 击 鼠 标 右按 钮 。 当 用 户 移 动 鼠 标 光 标 时 , 反 馈 由 调 用 DrawTracderRect 和 onChanged Rect 来 更 新 。

通 过 从 右 下 方 选 择 一 个 rubber-band-type 选 择 来 实 现 跟 踪 。 如 果 允 许 反 转 的 话 , 则 可 以 通 过 向 上 至 左 或 向 下 至 右 拖 动 来 改 变 矩 形 的 大 小 。

请 参 阅 C RectTracker::DrawTrackerRect, CRectTracker::OnChangedRect, CRectTracker::CRectTracker

数 据 成 员

CRectTracker::m_nHandleSize

说 明

此 数 据 成 员 是 C RectTracker 的 调 整 大 小 把 手 的 按 像 素 表 示 的 尺 寸 。 用 缺 省 的 系统 值 初 始 化 。

CRectTracker::m_rect

说 明

用 客 户 坐 标 ( 以 像 素 计 ) 表 示 的 矩 形 的 当 前 位 置 。

请 参 阅 CRectTracker::CRectTracker, CRectTracker::Track, CRectTracker::TrackRubberBand

CRectTracker::m_sizeMin

说 明

矩 形 的 最 小 尺 寸 。 缺 省 值 cx 和 cy 都 从 边 框 宽 度 的 系 统 缺 省 值 计 算 而 来 。 该 数据 成 员 只 用 于 AdjustRect 成 员 函 数 。

请 参 阅 CRectTracker::Track, CRectTracker::TrackRubberBand, CRectTracker::AdjustRect

CRectTracker::m_nStyle

说 明

矩 形 的 当 前 风 格 , 各 种 风 格 的 列 表 参 见 C R ectTracker::CRectTracke r。

请 参 阅 RectTracker::CRectTracker, CRectTracker::Draw