其他功能提供追踪器是“橡皮筋”的选择,允许用户通过拖动尺寸矩形选择多种 OLE 项在要选择的项附近。 用户松开鼠标左键后,在用户选定区域中选择项并可由用户操作。 例如,用户可以选择拖动到另一个容器应用程序。
在应用程序 WM_LBUTTONDOWN 处理程序函数中实现此功能需要一些附加代码。
下面的代码示例实现橡胶带选择和其他功能。
else if (m_Tracker.HitTest(point) < 0)
{
// just to demonstrate CRectTracker::TrackRubberBand
CRectTracker trackerRubber;
if (trackerRubber.TrackRubberBand(this, point, TRUE))
{
MessageBeep(0); // beep indicates TRUE
// See if rubber band intersects
// with the doc's tracker
CRect rectT;
// so intersect rect works
trackerRubber.m_rect.NormalizeRect();
if (rectT.IntersectRect(trackerRubber.m_rect, m_Tracker.m_rect))
{
// If so, put resize handles on it (i.e. select it)
if (m_Tracker.m_nStyle & CRectTracker::resizeInside)
{
// swap from resize inside to resize outside for effect
m_Tracker.m_nStyle &= ~CRectTracker::resizeInside;
m_Tracker.m_nStyle |= CRectTracker::resizeOutside;
}
else
{
// Just use inside resize handles on first time
m_Tracker.m_nStyle &= ~CRectTracker::resizeOutside;
m_Tracker.m_nStyle |= CRectTracker::resizeInside;
}
GetDocument()->SetModifiedFlag();
GetDocument()->UpdateAllViews(NULL);
}
}
}
在橡皮筋方法期间,如果要允许 TRACKER 的可逆方向,您应调用使用第三个参数中的 CRectTracker::TrackRubberBand 设置为 TRUE。 记住允许可逆方向有时将导致CRectTracker::m_rect反向。 这可以通过调用CRect::NormalizeRect来更正。