Compartilhar via


Elásticos e controladores

Outro recurso fornecido com os rastreadores é a seleção de "elástico", que permite que um usuário selecione vários itens OLE arrastando um retângulo de dimensionamento ao redor dos itens a serem selecionados. Quando o usuário solta o botão esquerdo do mouse, os itens na região selecionada por ele são selecionados e podem ser manipulados pelo usuário. Por exemplo, o usuário pode arrastar a seleção para outro aplicativo de contêiner.

A implementação desse recurso requer código adicional na função de manipulador WM_LBUTTONDOWN do aplicativo.

O exemplo de código a seguir implementa a seleção de elástico e recursos adicionais.

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 você quiser permitir a orientação reversível do rastreador durante o uso do elástico, chame CRectTracker::TrackRubberBand com o terceiro parâmetro definido como TRUE. Lembre-se de que permitir a orientação reversível às vezes fará com que CRectTracker::m_rect seja invertido. Isso pode ser corrigido por uma chamada para CRect::NormalizeRect.

Para obter mais informações, consulte Itens de cliente de contêiner e Arrastar e soltar do OLE: personalizar o recurso de arrastar e soltar.

Confira também

Controladores: implementando controladores no aplicativo OLE
Classe CRectTracker