橡皮筋和跟踪器

提供有跟踪器的其他功能是“橡皮筋”选择,该功能允许用户通过围绕要选择的项拖动调整大小矩形来选择多个 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);
   }
}
}

如果希望允许跟踪器在橡皮筋法期间方向可逆,则应调用 CRectTracker::TrackRubberBand 并将第三个参数设置为 TRUE。 记住,允许可逆方向有时将导致 CRectTracker::m_rect 反向。 这可以通过调用 CRect::NormalizeRect 来更正。

有关详细信息,请参阅容器客户端项OLE 拖放:自定义拖放

另请参阅

跟踪器:在 OLE 应用程序内实现跟踪器
CRectTracker 类