Gummibandtechnik und Ziehpunkte

Ein weiteres Feature, das mit Trackern geliefert wird, ist die Auswahl "Gummiband", mit der ein Benutzer mehrere OLE-Elemente auswählen kann, indem ein Größenrechteck um die zu markierenden Elemente gezogen wird. Wenn der Benutzer die linke Maustaste loslässt, werden Elemente innerhalb des vom Benutzer ausgewählten Bereichs ausgewählt und können vom Benutzer bearbeitet werden. Beispielsweise kann der Benutzer die Auswahl in eine andere Containeranwendung ziehen.

Die Implementierung dieses Features erfordert zusätzlichen Code in der WM_LBUTTONDOWN-Handlerfunktion Ihrer Anwendung.

Im folgenden Codebeispiel werden die Gummibandauswahl und zusätzliche Features implementiert.

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);
   }
}
}

Wenn Sie die umkehrbare Ausrichtung des Trackers während des Gummibands zulassen möchten, sollten Sie CRectTracker::TrackRubberBand aufrufen, wobei der dritte Parameter auf TRUE festgelegt ist. Denken Sie daran, dass das Zulassen umkehrbarer Ausrichtung manchmal dazu führt , dass CRectTracker::m_rect invertiert wird. Dies kann durch einen Aufruf von CRect::NormalizeRect korrigiert werden.

Weitere Informationen finden Sie unter Container client items and OLE drag and drop: Customize drag and drop.

Siehe auch

Tracker: Implementieren von Trackern in einer OLE-Anwendung
CRectTracker-Klasse