Share via


CRectTracker 类

使项以不同方式显示、移动和调整大小。

语法

class CRectTracker

成员

公共构造函数

名称 描述
CRectTracker::CRectTracker 构造 CRectTracker 对象。

公共方法

名称 描述
CRectTracker::AdjustRect 在调整矩形大小时调用。
CRectTracker::Draw 呈现矩形。
CRectTracker::DrawTrackerRect 在绘制 CRectTracker 对象的边框时调用。
CRectTracker::GetHandleMask 调用以获取 CRectTracker 项的调整大小图柄的掩码。
CRectTracker::GetTrueRect 返回矩形的宽度和高度,包括调整大小图柄。
CRectTracker::HitTest 返回与 CRectTracker 对象相关的游标的当前位置。
CRectTracker::NormalizeHit 规范化命中测试代码。
CRectTracker::OnChangedRect 在调整矩形大小或移动矩形时调用。
CRectTracker::SetCursor 根据光标在矩形上的位置设置光标。
CRectTracker::Track 允许用户操作矩形。
CRectTracker::TrackRubberBand 允许用户进行“橡皮筋”选择。

公共数据成员

“属性” 描述
CRectTracker::m_nHandleSize 确定调整大小图柄的大小。
CRectTracker::m_nStyle 跟踪器的当前样式。
CRectTracker::m_rect 矩形的当前位置(以像素为单位)。
CRectTracker::m_sizeMin 确定最小矩形宽度和高度。

备注

CRectTracker 没有基类。

尽管 CRectTracker 类被设计为允许用户使用图形界面与 OLE 项交互,但它的使用并不限于支持 OLE 的应用程序。 可以在需要此类用户界面的任何位置使用它。

CRectTracker 边框可以是实线或虚线。 可以为项提供带阴影的边框或叠加带阴影的图案,以指示项的不同状态。 可以将八个调整大小图柄放在项的边框外部或内部。 (有关调整大小图柄的说明,请参阅 GetHandleMask。)最后,CRectTracker 允许在调整大小期间更改项的方向。

若要使用 CRectTracker,可以构造 CRectTracker 对象并指定初始化哪些显示状态。 然后,可以使用此界面为用户提供有关与 CRectTracker 对象关联的 OLE 项的当前状态的视觉反馈。

有关如何使用 CRectTracker 的详细信息,请参阅跟踪器一文。

继承层次结构

CRectTracker

要求

标头:afxext.h

CRectTracker::AdjustRect

使用调整大小图柄调整跟踪矩形的大小时由框架调用。

virtual void AdjustRect(
    int nHandle,
    LPRECT lpRect);

参数

nHandle
所用图柄的索引。

lpRect
指向矩形当前大小的指针。 (矩形的大小由其高度和宽度决定。)

备注

此函数的默认行为仅允许在允许反转的情况下调用 TrackTrackRubberBand 来改变矩形的方向。

重写此函数以控制拖动操作期间对跟踪矩形的调整。 一种方法是在返回之前调整 lpRect 指定的坐标。

通过重写此函数,可以实现不直接受 CRectTracker 支持的特殊功能,例如对齐网格或保持纵横比。

CRectTracker::CRectTracker

创建并初始化一个 CRectTracker 对象。

CRectTracker();

CRectTracker(
    LPCRECT lpSrcRect,
    UINT nStyle);

参数

lpSrcRect
矩形对象的坐标。

nStyle
指定 CRectTracker 对象的样式。 支持以下样式:

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

  • CRectTracker::dottedLine 对矩形边框使用虚线。

  • CRectTracker::hatchedBorder 对矩形边框使用带阴影的图案。

  • CRectTracker::resizeInside 调整位于矩形内的图柄的大小。

  • CRectTracker::resizeOutside 调整位于矩形外的图柄的大小。

  • CRectTracker::hatchInside 带阴影的图案覆盖整个矩形。

备注

默认构造函数使用来自 lpSrcRectCRectTracker 的值初始化 对象,并将其他大小初始化为系统默认值。 如果创建对象时没有参数,那么 m_rectm_nStyle 数据成员就不会被初始化。

CRectTracker::Draw

调用此函数以绘制矩形的外部线和内部区域。

void Draw(CDC* pDC) const;

参数

pDC
指向要进行绘制的设备上下文的指针。

注解

跟踪器的样式决定了绘图的完成方式。 有关可用样式的详细信息,请参阅 CRectTracker 的构造函数。

CRectTracker::DrawTrackerRect

每当跟踪器的位置在 TrackTrackRubberBand 成员函数内部发生变化时由框架调用。

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

参数

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

pWndClipTo
指向用于剪切矩形的窗口的指针。

pDC
指向要进行绘制的设备上下文的指针。

pWnd
指向要在其中进行绘制的窗口的指针。

备注

默认实现调用 CDC::DrawFocusRect,这将绘制一个虚线矩形。

重写此函数以在跟踪操作期间提供不同的反馈。

CRectTracker::GetHandleMask

框架调用此成员函数来检索矩形调整大小图柄的掩码。

virtual UINT GetHandleMask() const;

返回值

CRectTracker 项的调整大小图柄的掩码。

注解

调整大小图柄显示在矩形的边和角上,用户可以控制矩形的形状和大小。

一个矩形有 8 个调整大小图柄,编号为 0-7。 每个调整大小图柄由掩码中的一个位表示;该位的值为 2^ n,其中 n 是调整大小图柄的编号。 位 0-3 对应于角调整大小图柄,从左上角开始顺时针移动。 位 4-7 对应于边调整大小图柄,从顶部开始顺时针移动。 下图显示了矩形的调整大小图柄及其相应的调整大小图柄的编号和值:

Resize handle numbers.

GetHandleMask 的默认实现返回位的掩码,以便显示调整大小图柄。 如果单个位处于打开状态,将绘制相应的调整大小图柄。

重写此成员函数以隐藏或显示指示的调整大小图柄。

CRectTracker::GetTrueRect

调用此函数以检索矩形的坐标。

void GetTrueRect(LPRECT lpTrueRect) const;

参数

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

注解

矩形的尺寸包括位于外部边框上的任何调整大小图柄的高度和宽度。 返回时,lpTrueRect 始终是设备坐标中的规范化矩形。

CRectTracker::HitTest

调用此函数以了解用户是否已抓取一个调整大小图柄。

int HitTest(CPoint point) const;

参数

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

返回值

返回的值基于枚举类型 CRectTracker::TrackerHit,可以具有以下值之一:

  • CRectTracker::hitNothing -1

  • CRectTracker::hitTopLeft 0

  • CRectTracker::hitTopRight 1

  • CRectTracker::hitBottomRight 2

  • CRectTracker::hitBottomLeft 3

  • CRectTracker::hitTop 4

  • CRectTracker::hitRight 5

  • CRectTracker::hitBottom 6

  • CRectTracker::hitLeft 7

  • CRectTracker::hitMiddle 8

CRectTracker::m_nHandleSize

CRectTracker 调整大小图柄的大小(以像素为单位)。

int m_nHandleSize;

注解

使用默认系统值初始化。

CRectTracker::m_rect

矩形在客户端坐标中的当前位置(像素)。

CRect m_rect;

CRectTracker::m_sizeMin

矩形的最小大小。

CSize m_sizeMin;

注解

默认值 cxcy 都是通过边框宽度的默认系统值计算的。 此数据成员仅由 AdjustRect 成员函数使用。

CRectTracker::m_nStyle

矩形的当前样式。

UINT m_nStyle;

注解

有关可能样式的列表,请参阅 CRectTracker::CRectTracker

CRectTracker::NormalizeHit

调用此函数以转换可能反转的图柄。

int NormalizeHit(int nHandle) const;

参数

nHandle
用户选择的图柄。

返回值

规范化图柄的索引。

备注

在允许反转的情况调用 CRectTracker::TrackCRectTracker::TrackRubberBand 时,矩形可以在 x 轴和/或 y 轴上反转。 发生这种情况时,HitTest 将返回相对于矩形来说也是反转的图柄。 这不适合用于绘制光标反馈,因为反馈取决于矩形的屏幕位置,而不是将被修改的矩形数据结构的一部分。

CRectTracker::OnChangedRect

每当在调用 Track 期间跟踪器矩形发生变化时由框架调用。

virtual void OnChangedRect(const CRect& rectOld);

参数

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

备注

调用此函数时,所有使用 DrawTrackerRect 绘制的反馈都已经被删除。 此函数的默认实现不执行任何操作。

如果要在调整矩形大小后执行任何操作,则重写此函数。

CRectTracker::SetCursor

当光标在 CRectTracker 对象的区域上时,调用此函数来改变光标的形状。

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

参数

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

nHitTest
上一命中测试的结果,来自 WM_SETCURSOR 消息。

返回值

如果上一命中是在跟踪器矩形上,则为非零值;否则为 0。

注解

从处理 WM_SETCURSOR 消息(通常为 OnSetCursor)的窗口的函数内部调用此函数。

CRectTracker::Track

调用此函数以显示用于调整矩形大小的用户界面。

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

参数

pWnd
包含矩形的窗口对象。

point
相对于工作区的当前鼠标位置的设备坐标。

bAllowInvert
如果为 TRUE,则可以沿 x 轴或 y 轴反转矩形;否则为 FALSE。

pWndClipTo
绘制操作将剪切到的窗口。 如果为 NULL,pWnd 将用作剪切矩形。

返回值

如果按下 ESC 键,跟踪过程会停止,跟踪器中存储的矩形不会改变,并且返回 0。 如果更改已提交,通过移动鼠标并释放鼠标左键后,会在跟踪器的矩形中记录新的位置和/或大小,并返回非零值。

备注

这通常是从处理 WM_LBUTTONDOWN 消息(通常为 OnLButtonDown)的应用程序的函数内部调用的。

此函数将捕获鼠标,直到用户释放鼠标左键、按 ESC 键或按鼠标右键。 当用户移动鼠标光标时,会通过调用 DrawTrackerRectOnChangedRect 更新反馈。

如果 bAllowInvert 为 TRUE,则可以在 x 轴或 y 轴上反转跟踪矩形。

CRectTracker::TrackRubberBand

调用此函数以执行橡皮筋选择。

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

参数

pWnd
包含矩形的窗口对象。

point
相对于工作区的当前鼠标位置的设备坐标。

bAllowInvert
如果为 TRUE,则可以沿 x 轴或 y 轴反转矩形;否则为 FALSE。

返回值

如果鼠标已移动且矩形不为空,则为非零值;否则为 0。

注解

它通常是从处理 WM_LBUTTONDOWN 消息(通常为 OnLButtonDown)的应用程序的函数内部调用的。

此函数将捕获鼠标,直到用户释放鼠标左键、按 ESC 键或按鼠标右键。 当用户移动鼠标光标时,会通过调用 DrawTrackerRectOnChangedRect 更新反馈。

跟踪是通过右下方图柄的橡皮筋式选择来进行的。 如果允许反转,可以通过向上和向左或向下和向右拖动来调整矩形的大小。

另请参阅

MFC 示例跟踪器
MFC 示例 DRAWCLI
层次结构图
COleResizeBar 类
CRect 类