您的位置:首页 > 其它

CRectTracker源码学习笔记

2015-08-03 16:41 417 查看


公共数据成员:

CRectTracker::m_nHandleSize :resize
handles的尺寸

CRectTracker::m_nStyle :tracker的当前样式

CRectTracker::m_rect :矩形的当前位置(以像素为单位)

CRectTracker::m_sizeMin :矩形的最小尺寸

公共方法:

void CRectTracker::Draw(CDC* pDC) const //呈现矩形

{

按m_nStyle和m_rect:

画线(dottedLine、solidLine)

画hatch inside

画hatched border

画resize handles

}


BOOL CRectTracker::SetCursor(CWnd* pWnd, UINT nHitTest) const //根据鼠标在矩形上的位置设置光标,光标无需改变返回FALSE

int CRectTracker::HitTest(CPoint point) const //返回击中Tracker的位置(返回枚举TrackerHit的值:hitNothing,hitTopLeft, hitTopRight, hitBottomRight, hitBottomLeft, hitTop, hitRight, hitBottom, hitLeft,hitMiddle),SetCursor中进行了调用。

int CRectTracker::NormalizeHit(int nHandle) const //规范化命中测试函数HitTest的返回值。SetCursor中调用于HitTest之后,为了确保能得到正确的光标。
void CRectTracker::AdjustRect(int nHandle, LPRECT) //矩形尺寸改变时调用

void CRectTracker::GetTrueRect(LPRECT lpTrueRect) const; //得到整个tracker矩形的宽度和高度,包括resise handles


BOOL Track(CWnd* pWnd, CPoint point, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL);//使用户能够操作矩形。调整矩形大小时,显示矩形框动作。

{

没有击中把手返回FALSE,

否则调用HitTestHandles函数返回被点击的handle编号,然后调用TrackHandle函数,这个编号作为参数。

}


BOOL CRectTracker::TrackRubberBand(CWnd* pWnd, CPoint point, BOOL bAllowInvert)//使用户能够用橡皮筋矩形进行选择

{

通常由鼠标落下事件处理函数调用。

以鼠标落下的点的坐标建立矩形m_rect.SetRect(point.x, point.y, point.x, point.y);

同时将这个点作为右下角的handle(handle编号为hitBottomRight)来调用TrackerHandle函数。

}


void CRectTracker::DrawTrackerRect(LPCRECT lpRect, CWnd* pWndClipTo, CDC* pDC, CWnd* pWnd)//绘制RectTracker的矩形,在矩形的位置或尺寸更改时调用
{
规范化矩形lpRect,根据Tracker的样式调整它的大小。
调用CDC的DrawDragRect函数绘制当前矩形并擦除旧的矩形。
TrackHandle函数中调用了此函数。
}


void CRectTracker::OnChangedRect(const CRect& /*rectOld*/)//矩形改变尺寸或位置后调用
{
没有实现的虚函数,方便继承。
}


保护方法:

BOOL CRectTracker::TrackHandle(int nHandle, CWnd* pWnd, CPoint point,CWnd* pWndClipTo)

{

窗口pWnd设置鼠标捕获

处理鼠标移动和抬起的消息并调用DrawTrackerRect函数绘制改变后的矩形。

}

参考资料:

CRectTracker(橡皮筋)类的使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: