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

トラッカーで提供されるもう 1 つの機能は、"ラバー バンド" の選択です。これによりユーザーは、選択する項目の周囲にサイズ変更用の四角形をドラッグして、複数の 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);
   }
}
}

ラバー バンド中にトラッカーの反転を許可する場合は、3 番目のパラメーターを TRUE に設定した CRectTracker::TrackRubberBand を呼び出す必要があります。 反転を許可すると、CRectTracker::m_rect が反転される場合があるので注意してください。 これは、CRect::NormalizeRect に対する呼び出しによって修正できます。

詳細については、コンテナーのクライアント項目に関する記事と、「OLE のドラッグ アンド ドロップ」の「ドラッグアンドドロップのカスタマイズ」を参照してください。

関連項目

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