www.pudn.com > drawpad.zip > selecttool.cpp


#include "stdafx.h" 
#include "DrawPadDoc.h" 
#include "DrawPadView.h" 
#include "eselection.h" 
#include "selecttool.h" 
 
IMPLEMENT_DYNAMIC(SELECT_TOOL, MOUSE_TOOL) 
 
SELECT_TOOL::SELECT_TOOL() 
{ 
	m_pRbdRect = NULL; 
	m_pView = NULL; 
} 
 
SELECT_TOOL::~SELECT_TOOL() 
{ 
	//if( m_pRbdRect ) delete m_pRbdRect; 
} 
 
int SELECT_TOOL::ProcessEvent(int evType, const PICK_EVENT& pe) 
{ 
	switch( evType ) { 
	case WM_LBUTTONDOWN: 
		m_nStart = pe.pick(); 
		m_nEnd = pe.pick(); 
		m_pView = pe.view(); 
		//if( m_pRbdRect ) delete m_pRbdRect; 
		//m_pRbdRect = new RBD_RECT(m_nStart); 
		//m_pRbdRect->Start(pe); 
		evType = 0; 
		break; 
	case WM_LBUTTONUP: 
		//delete m_pRbdRect; 
		//m_pRbdRect = NULL; 
		m_nEnd = pe.pick(); 
		Pick(); 
		evType = 0; 
		break; 
	} 
	return MOUSE_TOOL::ProcessEvent(evType, pe); 
} 
 
void SELECT_TOOL::Pick() 
{ 
	 
	if( !m_pView ) return ; 
	CDrawPadDoc *pDoc = (CDrawPadDoc *)m_pView->GetDocument(); 
	ASSERT_VALID(pDoc); 
	SELECTION *pSel = ((CDrawPadView *)m_pView)->GetSelection(); 
	if( m_nStart == m_nEnd ) {               // Pick one entity 
		ENTITY *ent = NULL; 
		if( pDoc->PickEntity(m_nLP, ent) ) { 
			if( !(m_nLP.flags() & MK_SHIFT) )  
				pSel->Clear(TRUE); 
			pSel->Add(ent, m_nLP.pick()); 
		} 
		else { 
			if( !(m_nLP.flags() & MK_SHIFT) ) 
				pSel->Clear(TRUE); 
		} 
	} 
	else if( m_nStart.x < m_nEnd.x ) {       // Window selection 
	} 
	else {                                   // Cross window selection 
	} 
}