CRectTracker在CScrollView中的使用(转)

http://topic.csdn.net/u/20080625/13/cf92a220-d2a9-4f05-ae53-7acce4dd84dc.html

o(∩_∩)o...,谢谢了,成功了

我一开始是按你说的来做的,没成功,你那句“这两句是多余的。。”让我把所有你里边关于rect的语句都去掉了

好了,结贴吧,呵呵,谢谢了,不过我得把问题解决方法说清楚先:
第一步:在视类头文件里添加  
CRectTracker m_tracker;  
CRect m_RectTrack; //当时只注意到了mxm324仁兄说那两句可以不要,没注意到后边半句才是关键“rect是成员变量”=_=!

第二步:在构造函数里初始化  
CtrackerView::CtrackerView()  
{  
  m_RectTracker.SetRect(100,100,200,200); //初始化大小  
  m_tracker.m_nStyle = CRectTracker::solidLine ¦ CRectTracker::resizeInside; //设置边框样式  
}  

第三步:在OnDraw函数里画出来  
void CtrackerView::OnDraw(CDC* pDC)  
{  
  CtrackerDoc* pDoc = GetDocument();  
  ASSERT_VALID(pDoc);  
  if (!pDoc)  
  return;  

  CBrush brush(RGB(192,192,192));  
  pDC->SelectObject(&brush);  

////////////// mxm324仁兄说下面两句可以注释掉,但我尝试后发现,
////////////// 第二句是必须的,否则没法画出矩形
  pDC->Rectangle(m_RectTracker);
  m_tracker.m_rect = m_RectTracker;

  pDC->LPtoDP(&m_tracker.m_rect);
  m_tracker.Draw(pDC);
}
 
第四步:更改OnLButtonDown函数
void CtrackerView::OnLButtonDown(UINT nFlags, CPoint point)  
{  
  CClientDC dc(this);
  m_tracker.Track(this,point);
  m_RectTracker = m_tracker.m_rect;
  OnPrepareDC(&dc);
  dc.DPtoLP(&m_RectTracker);
  this->Invalidate(TRUE);

  CScrollView::OnLButtonDown(nFlags, point);  
}
 
第五步:设置光标
BOOL CtrackerView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)  
{  
  if(pWnd == this && m_tracker.SetCursor(this, nHitTest)) //当鼠标进入到方块范围内则改变光标  
  return TRUE;  
  return CScrollView::OnSetCursor(pWnd, nHitTest, message);  
}  

原文地址:https://www.cnblogs.com/lebronjames/p/2063028.html