CRectTracker(橡皮筋)类的使用
(2013-01-28 14:30:42)
标签:
crecttrackermfc教育 |
分类: MFC相关(每日进步一点点) |
CRectTracker(俗称“橡皮筋”类)是一个非常有意思的类。你在Windows中,在桌面上用鼠标拖拽,便可以看到一个虚线的矩形框,它便是橡皮筋.它可以用做显示边界,你也可以扽它的八个角用来放大缩小,做框选使用。如何通过编程来实现这种功能呢?这就是CRectTracker类的作用;
一、CrectTracker
类成员:
一
1.
当前橡皮筋矩形的矩形框的位置
2.
决定橡皮筋最小矩形的最新的长和宽
3.m_nHandleSize
4.
橡皮筋矩形的形式如:
里面来改变大小)
二、 CrectTracker
成员函数:
1.void Draw( CDC* pDC )
const;
这个函数用来划矩形框的边框和内部区域。
2.void GetTrueRect( LPRECT lpTrueRect ) const;
这个函数用来获取矩形框的 矩形坐标,参数为CRECT类型的指针,返回矩形
3.int HitTest( CPoint point ) const;
当你鼠标被按下的时候,你可以调用这个函数,它将返回鼠标点在了矩形框的什么位置:
返回值代表的含义
-1点在了四边形的外部
0左上角
1右上角
2右下角
3左下角(0,1,2,3正好是顺时针转了一圈)
4顶部
5右部
6底部
7左部(还是顺时针转了一圈)
8点在了四边形的内部,但没有击中前面的那八个调节点
可以看出,返回值如果大于等于零则在四边形区域之内。如果小于则说明不在区域范围之内。
4.BOOL SetCursor(
CWnd* pWnd, UINT nHitTest ) const;
调用这个函数用来当鼠标放在矩形框时,显示各种鼠标形象
5.BOOL Track( CWnd*
pWnd, CPoint point, BOOL bAllowInvert = FALSE, CWnd* pWndClipTo =
NULL );
这个函数用来支持人们用鼠标改变矩形框大小 或 拖拽矩形框时显示矩形框动作
(用来调整各个调节柄以改变选区的大小和位置)
一般由WM_LBUTTONDOWN 消息来触发这个函数,
不需要编写MouseMove函数,矩形框它就自动的变大小了呢?这就是Track()函数的功劳,从调用它到抬起鼠标键为止,它时刻的改变四边形的大小。
6.BOOL TrackRubberBand( CWnd* pWnd,
CPoint point, BOOL bAllowInvert = TRUE
);
当鼠标在空区域拖拽时显示橡皮筋矩形框,让鼠标画一个“
(一般可以用来重新绘制选区)
特别值得注意的是:在TrackRubberBand
三、具体实现示例
1、在窗口类中申明成员变量 CRectTracker m_RectTracker
2、在初始化函数中初始化成员的属性,比如:
m_RectTracker.m_nStyle=CRectTracker::resizeInside|CRectTracker::dottedLine;//设置RectTracker样式
m_RectTracker.m_nHandleSize = 5; //控制柄的像素大小
m_RectTracker.m_rect.SetRect(0,0,0,0); //初始化m_rect的值
3、一般在OnLButtonDown事件中操作CrectTracker对象,代码如下
void CDM_CtrlPadDlg::OnLButtonDown(UINT nFlags, CPoint
point)
{
}
4、相应OnPaint消息(显示CrectTracker对象)
只需要调用CrectTracker的Draw方法即可
m_RectTracker.Draw(&dc);//将这个四边形选区画出来
四、关于正规化矩形的说明