접기
class CTrackerView : public CView
{
protected: // create from serialization only
CTrackerView();
DECLARE_DYNCREATE(CTrackerView)
// Attributes
public:
CTrackerDoc* GetDocument();
// <
CRectTracker m_tracker;
// >
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CTrackerView)
..
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
//}}AFX_VIRTUAL
..
// Generated message map functions
protected:
//{{AFX_MSG(CTrackerView)
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CTrackerView, CView)
//{{AFX_MSG_MAP(CTrackerView)
ON_WM_LBUTTONDOWN()
ON_WM_SETCURSOR()
//}}AFX_MSG_MAP
..
END_MESSAGE_MAP()
..
CTrackerView::CTrackerView()
{
// TODO: add construction code here
m_tracker.m_nStyle = CRectTracker::hatchedBorder |CRectTracker::resizeOutside ;
}
..
void CTrackerView::OnDraw(CDC* pDC)
{
m_tracker.Draw (pDC);
}
..
void CTrackerView::OnLButtonDown(UINT nFlags, CPoint point)
{
CTrackerDoc* pDoc = GetDocument();
// 이전 트래커의 위치를 저장
CRect rect;
m_tracker.GetTrueRect (rect);
if (m_tracker.HitTest (point) < 0)
{
// 선택 영역을 다시 설정
m_tracker.TrackRubberBand (this, point);
// 이전에 트래커가 있던 부분을 다시 그림
pDoc->UpdateAllViews(NULL, (LPARAM)(LPCRECT)rect);
// 새로 트래커가 그려질 부분을 다시 그림
pDoc->UpdateAllViews(NULL);
}
else
{
// 선택 영역을 변형 (이동 또는 크기 조절)
m_tracker.Track (this, point);
// 이전에 트래커가 있던 부분을 다시 그림
pDoc->UpdateAllViews(NULL, (LPARAM)(LPCRECT)rect);
// 새로 트래커가 그려질 부분을 다시 그림
pDoc->UpdateAllViews(NULL);
}
CView::OnLButtonDown(nFlags, point);
}
void CTrackerView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
if (lHint == 0)
{
CRect rectTrue;
m_tracker.GetTrueRect (&rectTrue);
InvalidateRect(rectTrue);
}
else
{
InvalidateRect((CRect*)lHint);
}
}
BOOL CTrackerView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
if (pWnd == this && m_tracker.SetCursor (this, nHitTest))
return TRUE;
return CView::OnSetCursor(pWnd, nHitTest, message);
}
접기