Condividi tramite


Selezione e tracker

Un'altra funzionalità fornita dagli strumenti di rilevamento è la selezione "rubber-band", che consente a un utente di selezionare più elementi OLE trascinando un rettangolo di ridimensionamento attorno agli elementi da selezionare. Quando l'utente rilascia il pulsante sinistro del mouse, gli elementi inclusi nell'area selezionata dall'utente vengono selezionati e possono essere modificati dall'utente. Ad esempio, l'utente può trascinare la selezione in un'altra applicazione contenitore.

Implementare questa funzionalità richiede una parte di codice addizionale nella funzione di gestione di WM_LBUTTONDOWN dell'applicazione.

Nell'esempio di codice seguente si implementano la selezione rubber-band e le funzionalità aggiuntive.

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

Se si desidera consentire l'orientamento reversibile dello strumento di rilevamento durante la rubber-banding, è necessario chiamare CRectTracker::TrackRubberBand con il terzo parametro impostato su TRUE. Si tenga presente che consentire l'orientamento reversibile può indurre l'inversione di CRectTracker::m_rect. Questo comportamento può essere corretto mediante una chiamata a CRect::NormalizeRect.

Per ulteriori informazioni, vedere Elementi client dei contenitori e Personalizzare il trascinamento della selezione.

Vedere anche

Riferimenti

Classe CRectTracker

Concetti

Tracker: implementazione di tracker nell'applicazione OLE