次の方法で共有


ラバー バンド処理とトラッカー

トラッカーが提供するもう 1 つの機能は、"ラバー バンド" 選択処理です。この機能を使用して、ユーザーはサイズ変更可能な四角形 (1 点を決めてドラッグすることによって広がる四角形) をドラッグして OLE アイテムを囲むことにより、複数の OLE アイテムを選択できます。 ユーザーが左ボタンを離すと境界内のアイテムが選択されて、以降のユーザー操作の対象になります。 たとえば、アイテムを選択し、ほかのコンテナー アプリケーションにドラッグできます。

この機能を実現するには、アプリケーションの WM_LBUTTONDOWN ハンドラー関数にいくつかのコードを加える必要があります。

次のコードは、ラバー バンド選択処理を実装しています。

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

ラバー バンド処理中に選択領域を表す四角形の "裏返し" 操作を行うことができるようにするには、CRectTracker::TrackRubberBand の第 3 パラメーターを TRUE に設定します。 裏返し操作を許すと、CRectTracker::m_rect の座標値の大小関係が反転する可能性があります。 座標値を正常な組み合わせに直すには、CRect::NormalizeRect を呼び出します。

詳細については、「コンテナー : クライアント アイテム」および「ドラッグ アンド ドロップ : カスタマイズ」を参照してください。

参照

参照

CRectTracker クラス

概念

トラッカー : OLE アプリケーションでのトラッカーの実装