其响应WM_LBUTTONDOWN和WM_SETCURSOR消息,因此其实现在这两个消息的响应函数内。下面写了一个例程,并进行分析。
CRectTracker m_tracker;
m_tracker.m_nStyle=CRectTracker::resizeInside|CRectTracker::solidLine|CRectTracker::hitNothing;
CPoint pt_start,pt_end;
void *****::OnLButtonDown(UINT nFlags, CPoint point)
{
if(m_tracker.HitTest(point)<0)
{
CRectTracker temp;
temp.TrackRubberBand(this,point);
temp.m_rect.NormalizeRect();
pt_start=point;//鼠标(矩形选框)结束位置
GetCursorPos(&pt_end);
this->SendMessage(WM_LBUTTONUP,NULL,NULL);//响应此消息绘制新的矩形区域
}
else
{
m_rectTracker.Track(this,point,TRUE);
m_tracker.m_rect.NormalizeRect();
m_tracker.Draw();
}
}
void *****::OnLButtonUp(UINT nFlags,CPoint point)
{
ScreenToClient(&pt_start);
ScreenToClient(&pt_end);
m_tracker.m_rect.SetRect(pt_start.x,pt_start.y,pt_end.x,pt_end.y);
m_rectTracker.m_rect.NormalizeRect();
m_tracker.Draw();
}
参考文章:
http://blog.sina.com.cn/s/blog_583959c90100blk3.html