拖放矩形和追蹤器
其他功能提供 Tracker 是「橡膠群組列」選取範圍,讓使用者可以透過拖曳縮放矩形選取多個 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 到 TRUE。 請記得允許還原方向有時候會造成 CRectTracker::m_rect 成為物件的。 您可以對 CRect::NormalizeRect的呼叫修正。