CRectTracker源码学习笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yueashuxia/article/details/47258231


公共数据成员:

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
}
//根据鼠标在矩形上的位置设置光标,光标无需改变返回FALSE
BOOL CRectTracker::SetCursor(CWnd* pWnd, UINT nHitTest) const;
//返回击中Tracker的位置(返回枚举TrackerHit的值:hitNothing,hitTopLeft, 
//hitTopRight, hitBottomRight, hitBottomLeft, hitTop, hitRight, hitBottom, hitLeft,hitMiddle)
//SetCursor中进行了调用
int CRectTracker::HitTest(CPoint point) const;
//规范化命中测试函数HitTest的返回值。
//SetCursor中调用于HitTest之后,为了确保能得到正确的光标。
int CRectTracker::NormalizeHit(int nHandle) const;
//矩形尺寸改变时调用
void CRectTracker::AdjustRect(int nHandle, LPRECT);
//得到整个tracker矩形的宽度和高度,包括resise handles
void CRectTracker::GetTrueRect(LPRECT lpTrueRect) const;
//使用户能够操作矩形。调整矩形大小时,显示矩形框动作。
BOOL Track(CWnd* pWnd, CPoint point, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo = NULL);
{ 
    没有击中把手返回FALSE, 否则调用HitTestHandles函数返回被点击的handle编号,然后调用TrackHandle函数,这个编号作为参数。
}
//绘制RectTracker的矩形,在矩形的位置或尺寸更改时调用
void CRectTracker::DrawTrackerRect(LPCRECT lpRect, CWnd* pWndClipTo, CDC* pDC, CWnd* pWnd)
{ 
    规范化矩形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(橡皮筋)类的使用



没有更多推荐了,返回首页