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.