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