橡皮筋样式的生成多线程和TRACKER

另一个函数提供的跟踪器为 “橡胶带区”选择,允许用户通过拖动尺寸矩形选择多个 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的调用更正。

有关更多信息,请参见 容器客户端项目自定义拖放

请参见

参考

CRectTracker 类

概念

TRACKER:用于实现OLE应用程序的跟踪器