CRectTracker(俗称“橡皮筋”类)它可以用做显示边界,你也可以扽它的八个角用来放大缩小,或做框选使用.
http://dev.csdn.net/htmls/7/7001.html
这篇blog详细的介绍了,该类的使用。
使用该类首先需要初始化其一些成员:
1.CRectTracker::m_rect
指明初始化矩形的大小
2.CRectTracker::m_nStyle
说明矩形的风格
其风格有如下:
- CRectTracker::solidLine 实线.
- CRectTracker::dottedLine 虚线,其和实线不能同时使用.
- CRectTracker::hatchedBorder 边界带抛面线.
- CRectTracker::resizeInside 矩形内部画线.
- CRectTracker::resizeOutside 矩形外部画线.
- CRectTracker::hatchInside 内部带抛面线.
是使用过程中可以在先建立CRectTracker 的对象如m_Trect;再在初始化函数中设定,初始矩形的大小和风格如构造函数中
剩下的主要是操作界面中的二个消息响应函数分别是
OnSetCursor函数主要是改变光标在m_Trect区域内的形状
OnLButtonDown主要是矩形的一些动作其中一些很重要的函数就是:
CRectTracker::NormalizeHit,该函数起规则化作用,即用鼠标画一个虚线框。
CRectTracker::HitTest,该函数将返回,鼠标现相对矩形的位置
返回值 | 代表的含义 |
-1 | 点在了四边形的外部 |
0 | 左上角 |
1 | 右上角 |
2 | 右下角 |
3 | 左下角(0,1,2,3顺时针转了一圈) |
4 | 顶部 |
5 | 右部 |
6 | 底部 |
7 | 左部(还是顺时针转了一圈) |
8 | 点在了四边形的内部,但没有击中前面的那八个点 |
CRectTracker::Track,该函数将时时改变矩形的大小
BOOL Track( CWnd* pWnd, //包含矩形的窗口对象。
CPoint point,//当前鼠标位置相对于客户区的鼠标坐标。
BOOL bAllowInvert = FALSE,//如果此参数为TRUE,则矩形可沿x轴,或y轴反转;否则,此参数为FALSE
CWnd* pWndClipTo = NULL//绘制操作将要被剪贴到的窗口。如果该参数为NULL,则pWnd用作剪贴矩形。
);
CRectTracker::GetTrueRect
void GetTrueRect( LPRECT lpTrueRect ) const; 用于返回,m_Trect现在的大小及位置,用于重绘
下面的代码是上面blog牛人写的代码
BOOL TrackRubberBand( CWnd* pWnd, CPoint point, BOOL bAllowInvert = TRUE );
编译运行,当你按下鼠标并拖动,你将看到效果了。
我们如何让鼠标画一个“橡皮筋”区域呢? 在CRectTracker类中的成员函数就是:TrackRubberBand(this,point,TRUE); 注意其中的三个参数:
第一个参数,画“橡皮筋”的窗体的指针,当然是this
第二个参数,画“橡皮筋”的起始点。
让我们注意第三个参数,它非常有意思。当你使用 FALSE时(TRUE 值是缺省的),你的“橡皮筋”只能从左上到右下的画,不允许反向。编译运行一下FALSE这个值。
特别值得注意的是:在TrackRubberBand的过程中是以右键的抬起为结束的,这其间并没有CView的MouseMove发生。这一点一定要记住!
void Draw( CDC* pDC ) const;该函数将真正画出矩形框,如果调用该函数,那么m_Trect将不会被汇出。如果只需要画一个矩形虐内部的椭圆,则用GetTrueRect获取区域后绘出椭圆即可,无需将m_Trect绘出。