Udostępnij za pośrednictwem


Gumka i trackery

Kolejną funkcją dostarczaną z trackerami jest wybór "gumy", który umożliwia użytkownikowi wybranie wielu elementów OLE przez przeciągnięcie prostokąta rozmiaru wokół elementów do wybrania. Gdy użytkownik zwolni lewy przycisk myszy, elementy w regionie wybranym przez użytkownika są zaznaczone i mogą być manipulowane przez użytkownika. Na przykład użytkownik może przeciągnąć zaznaczenie do innej aplikacji kontenera.

Zaimplementowanie tej funkcji wymaga dodatkowego kodu w funkcji obsługi WM_LBUTTONDOWN aplikacji.

Poniższy przykładowy kod implementuje wybór gumy i dodatkowe funkcje.

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

Jeśli chcesz zezwolić na odwracalną orientację trackera podczas gumowego bandingu, należy wywołać metodę CRectTracker::TrackRubberBand z trzecim parametrem ustawionym na wartość TRUE. Należy pamiętać, że zezwolenie na odwrócenie orientacji czasami spowoduje odwrócenie CRectTracker::m_rect . Można to poprawić za pomocą wywołania metody CRect::NormalizeRect.

Aby uzyskać więcej informacji, zobacz Kontener Client Items and OLE drag and drop: Customize drag and drop (Elementy klienta kontenera i przeciąganie i upuszczanie OLE: dostosowywanie przeciągania i upuszczania).

Zobacz też

Trackery: implementowanie trackerów w aplikacji OLE
Klasa CRectTracker