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(橡皮筋)类的使用
相关文章推荐
- VS2012编译Lua5.3.1
- jsp页面中form表单提交到数据库的方法
- iOS开发系列--UITableView全面解析
- 洛谷2279 03湖南 消防局的设立
- oracle exp EXP-00008: 遇到 ORACLE 错误 904
- 辛星整理域名下的cookie问题
- UVA 177 PaperFolding 折纸痕 (分形,递归)
- 2015-8-3 暑假过了一半了
- VS2012编译Lua5.3.1
- Android 适配横屏
- win10 insider预览版怎么注册?insider会员注册方法
- python StringIO和BytesIO
- python StringIO和BytesIO
- android接收从其他App传送来的数据
- USACO 2.1.3 Sorting A Three-Valued Sequence
- uva 784
- hdu 1711 KMP模板题
- 1048:The Hardest Problem Ever
- 与时间相关的函数编程
- oracle 删除表找回