|
形区域定位(VC++) CRectTracker
在画面上,用鼠标拖拉来选择矩形範囲时,使用CRectTrackerク类。本文纪录使用方法。 1.创建一个View/Frame工程,为了保存矩形的坐标,用CRect型定义一个m_rect变量。把afxext.h头文件包含进来。 #include <afxext.h> 2.矩形区域定位类使用的是屏幕坐标。 void CTestRTView::OnInitialUpdate()
{
CView::OnInitialUpdate();
m_rect = CRect(10,10,100,100);
ClientToScreen(&m_rect);
}
3.为了试验,在矩形区域中描画一个楕円。 void CTestRTView::OnDraw(CDC* pDC)
{
CTestRTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pDC->Ellipse(&m_rect);
}
4.以鼠标的左键点击为开端,生成CRectTracker实体变量,调其功能。通过鼠标拖拉的操作确定矩形范围后,取出其坐标保存到m_rect中。重画楕円。 void CTestRTView::OnLButtonDown(UINT nFlags, CPoint point)
{
CClientDC dc(this);
if (m_rect.PtInRect(point))
{
CRectTracker tracker;
tracker.m_nHandleSize = 8;
tracker.m_rect = m_rect;
tracker.m_nStyle |= CRectTracker::resizeInside;
tracker.m_nStyle |= CRectTracker::solidLine;
tracker.Draw(&dc);
if (tracker.Track(this, point))
{
tracker.GetTrueRect(m_rect);
Invalidate();
}
}
CView::OnLButtonDown(nFlags, point);
}
5.为了操作方便,当鼠标移到矩形区域上方时,让鼠标形状変化。 BOOL CTestRTView::OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message)
{
CClientDC dc(this);
CRectTracker tracker;
tracker.m_nHandleSize = 8;
tracker.m_rect = m_rect;
tracker.m_nStyle |= CRectTracker::resizeInside;
tracker.m_nStyle |= CRectTracker::solidLine;
tracker.Draw(&dc);
if (tracker.SetCursor(this, nHitTest))
return TRUE;
return CView::OnSetCursor(pWnd, nHitTest, message);
}
|