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