Compartir a través de


Efecto de banda elástica y seguimiento

Otra característica proporcionada con los rastreadores es la selección de "banda elástica", que permite a un usuario seleccionar varios elementos OLE arrastrando un rectángulo de dimensionamiento alrededor de los elementos que se van a seleccionar. Cuando el usuario suelta el botón izquierdo del mouse, los elementos dentro de la región seleccionada por el usuario se seleccionan y el usuario los puede manipular. Por ejemplo, el usuario podría arrastrar la selección a otra aplicación contenedora.

La implementación de esta característica requiere código adicional en la función de controlador WM_LBUTTONDOWN de la aplicación.

En el ejemplo de código siguiente se implementa la selección de banda elástica y características adicionales.

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

Si desea permitir la orientación reversible del rastreador durante la selección de banda elástica, debe llamar a CRectTracker::TrackRubberBand con el tercer parámetro establecido en TRUE. Recuerde que permitir la orientación reversible a veces hará que CRectTracker::m_rect se invierta. Esto se puede corregir mediante una llamada a CRect::NormalizeRect.

Para más información, vea Elementos de cliente de contenedor y Arrastrar y colocar de OLE: personalización de arrastrar y colocar.

Consulte también

Seguimiento: Implementar el seguimiento en la aplicación OLE
CRectTracker (clase)