明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

如何完成一個橡皮區(qū)矩形

[摘要]CRectTracker是一個很有用的類,可以通過調(diào)用CRectTracker::TrackRubberBand 響應WM_LBUTTONDOWN消息來創(chuàng)建一個橡皮區(qū)矩形。下例表明使用CRectTracker移動和重置視窗中的藍色橢圓的大小是很容易的事情。首先,在文件檔中聲明一個CRectTrac...
CRectTracker是一個很有用的類,可以通過調(diào)用CRectTracker::TrackRubberBand 響應WM_LBUTTONDOWN消息來創(chuàng)建一個橡皮區(qū)矩形。
下例表明使用CRectTracker移動和重置視窗中的藍色橢圓的大小是很容易的事情。
首先,在文件檔中聲明一個CRectTracker數(shù)據(jù)成員:
class CSampleView : Public CView
{

public :
CrectTracker m_tracker

}
其次,在文檔類的構造函數(shù)中初始化CRectTracker 對象:
CSampleDoc:: CSampleDOC ()
{
//Initialize tracker position, size and style.
m_tracker.m_rect.SetRect (0, 0, 10, 10)
m_tracker.m_nStyle=CRectTracker:: resizeInside CRectTracker ::dottedLine
}
然后,在OnDraw函數(shù)中畫橢圓和蹤跡矩形:
void CSampleView:: OnDraw (CDC* pDC)
{
CSampleDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoc)
//Select blue brush into device context.
CBrush brush (RGB (0, 0, 255))
CBrush* pOldBrush=pDC->SelectObject (&brush)
//draw ellipse in tracking rectangle.
Crect rcEllipse
pDoc->m_tracker.GetTrueRect (rcEllipse)
pDC->Ellipse (rcEllipse)
//Draw tracking rectangle.
pDoc->m_tracker.Draw (pDC)
//Select blue brush out of device context.
pDC->Selectobject (pOldBrush)
}
最后,使用ClassWizard處理WM_LBUTTONDOWN消息,并增加下述代碼。該段代碼根據(jù)鼠標擊鍵情況可以拖放、移動或者重置橢圓的大小。
void CSampleView::OnLButtonDown (UINT nFlags, CPoint point)
{
//Get pointer to document.
CSampleDoc* pDoc=GetDocument ()
ASSERT_VALID (pDoc)
//If clicked on ellipse, drag or resize it.Otherwise create a
//rubber-band rectangle nd create a new ellipse.
BOOL bResult=pDoc->m_tracker.HitTest (point)!= CRectTracker::hitNothing
//Tracker rectangle changed so update views.
if (bResult)
{
pDoc->m_tracker.Track (this,point,TRue)
pDoc->SetModifiedFlag ()
pDoc->UpdateAllViews (NULL)
}
else
pDoc->m-tracker.TrackRubberBand(this,point,TRUE)
CView:: onLButtonDown (nFlags,point)