LRESULT CWBFrame::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
if( message == WM_COMMAND ){ WB_DRAW_TOOLS toolOld = m_viewParam.curTool; m_viewParam.bLineWidth = 1; switch( wParam ){
case ID_WB_EDIT_DEL:
m_viewParam.curTool = WB_TOOLS_DELETE;
break;
case ID_WB_TOOL_SELECT:
m_viewParam.curTool = WB_TOOLS_SELECT;
break;我选择上面的ID_WB_TOOL_SELECT事件后,结果并没有选择图元,而是删除了。为什么?相关鼠标事件代码如下:
void CWBView::OnLButtonDown(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
if( !m_bEnableOperation )
return; CPoint pt = point;
DPtoLP( &pt );

switch( m_pViewParam->curTool ) {
case WB_TOOLS_NONE:
break;
case WB_TOOLS_DELETE:
{
SetCapture();
m_ptDragStart = m_ptDragPrev = pt;
m_status = WB_OPERATION_STATUS_DELETING;
}
break;
case WB_TOOLS_SELECT:
{
SetCapture();
m_ptDragStart = m_ptDragPrev = pt; SHORT nLCtrlKeyStatus = GetKeyState( VK_LCONTROL );
SHORT nRCtrlKeyStatus = GetKeyState( VK_RCONTROL );
   if( nLCtrlKeyStatus&0xff00 || nRCtrlKeyStatus&0xff00 ){
m_status = WB_OPERATION_STATUS_SELECTING;
}else{
m_pOpObj = DragPointTest( pt, m_nDragPoint );
if( m_pOpObj ){
m_status = WB_OPERATION_STATUS_DRAGPOINT;
}else{
if( DragObjTest( pt )){
m_status = WB_OPERATION_STATUS_DRAGOBJ;
}else{
m_status = WB_OPERATION_STATUS_SELECTING;
}
}
}
}
break;
default:
if( m_pOpObj && m_status == WB_OPERATION_STATUS_DRAWINGOBJ ){

int nRet = m_pOpObj->LButtonDown( pt );

if( nRet == 1 )
FinishObjectCreate();
else{
RECT rect;
m_pOpObj->GetInvalidRect( &rect );
LPtoDP( &rect );
InvalidateRect( &rect,FALSE );
if( nRet == -1 ){
ReleaseCapture();
delete m_pOpObj;
m_pOpObj = NULL;
m_status = WB_OPERATION_STATUS_DRAWOBJ;
}
}

}else{
m_pOpObj = CreateObject( m_pViewParam->curTool,pt ); if( m_pOpObj ){ m_status = WB_OPERATION_STATUS_DRAWINGOBJ; if( m_pViewParam->curTool != WB_TOOLS_TEXT ){

int nRet = m_pOpObj->LButtonDown( pt );
if( nRet == 1 )
FinishObjectCreate();
if( nRet == -1 ){
delete m_pOpObj;
m_pOpObj = NULL;
m_status = WB_OPERATION_STATUS_DRAWOBJ;
}
if( nRet == 0 )
SetCapture();
}
}
}
break;
}
SelectCursor();

CScrollView::OnLButtonDown(nFlags, point);
}void CWBView::OnLButtonUp(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
if( !m_bEnableOperation )
return; CPoint pt = point;
DPtoLP( &pt );

switch( m_pViewParam->curTool ) {
case WB_TOOLS_NONE:
break;
case WB_TOOLS_DELETE:
if( m_status == WB_OPERATION_STATUS_DELETING ){
ReleaseCapture();
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
OnDeleteObject( m_ptDragStart,pt );
m_status = WB_OPERATION_STATUS_DELETE;
}
break;
case WB_TOOLS_SELECT:
{
switch( m_status ){
case WB_OPERATION_STATUS_DRAGPOINT:
FinishDragPoint();
break;
case WB_OPERATION_STATUS_DRAGOBJ:
FinishDragObj();
break;
case WB_OPERATION_STATUS_SELECTING:
{
ReleaseCapture();
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
ReselectObject( m_ptDragStart,pt );
DeleteSelectedObject();
}
break;
}
m_status = WB_OPERATION_STATUS_SELECT;
}
break;
default:
if( m_pOpObj && m_status == WB_OPERATION_STATUS_DRAWINGOBJ ){


int nRet = m_pOpObj->LButtonUp( pt );

if( nRet == 1 )
FinishObjectCreate();
else{
RECT rect;
m_pOpObj->GetInvalidRect( &rect );
LPtoDP( &rect );
InvalidateRect( &rect,FALSE ); if( nRet == -1 ){
ReleaseCapture();
delete m_pOpObj;
m_pOpObj = NULL;
m_status = WB_OPERATION_STATUS_DRAWOBJ;
}
}
}
break;
}
SelectCursor();
CScrollView::OnLButtonUp(nFlags, point);
}void CWBView::OnMouseMove(UINT nFlags, CPoint point) 
{
// TODO: Add your message handler code here and/or call default
CPoint pt = point;
DPtoLP( &pt );
SelectCursor();
CRect rcClient;
GetClientRect(&rcClient);
if (rcClient.PtInRect(point))
SetCursor( m_hCursor );
else
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW)); if( !m_bEnableOperation )
return; switch( m_pViewParam->curTool ) {
case WB_TOOLS_NONE:
break;
case WB_TOOLS_DELETE:
if( m_status == WB_OPERATION_STATUS_DELETING ){
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
m_ptDragPrev = pt;
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
}
break;
case WB_TOOLS_SELECT:
{
switch( m_status ){
case WB_OPERATION_STATUS_DRAGPOINT:
if( m_pOpObj ){

CSize sz = pt-m_ptDragPrev;
m_pOpObj->MovePointTo( m_nDragPoint,sz );
m_ptDragPrev = pt;
RECT rect;
m_pOpObj->GetInvalidRect( &rect );
LPtoDP( &rect );
InvalidateRect(  &rect, FALSE );
}
break;
case WB_OPERATION_STATUS_DRAGOBJ:
{
CRect rcInvalid;
CRect rcObj;
rcInvalid.SetRect(0,0,0,0); CSize sz = pt-m_ptDragPrev;
POSITION pos = m_lsSelected.GetHeadPosition();
while( pos ){
CDrawObj *pObj = m_lsSelected.GetNext( pos );
if( pObj ){
pObj->OffsetObj( sz );
pObj->GetInvalidRect( rcObj );
rcInvalid.UnionRect( rcObj,rcInvalid );
}
} m_ptDragPrev = pt;
LPtoDP( rcInvalid );
InvalidateRect( rcInvalid,FALSE );
}
break;
case WB_OPERATION_STATUS_SELECTING:
{
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
m_ptDragPrev = pt;
DrawSelectRect( m_ptDragStart,m_ptDragPrev );
}
break;
}
}
break;
default:
if( m_pOpObj && m_status == WB_OPERATION_STATUS_DRAWINGOBJ){ int nRet = m_pOpObj->MouseMove( pt );

if( nRet == 1 )
FinishObjectCreate();
else{
RECT rect;
m_pOpObj->GetInvalidRect( &rect );
LPtoDP( &rect );
InvalidateRect( &rect,FALSE );
if( nRet == -1 ){
ReleaseCapture();
delete m_pOpObj;
m_pOpObj = NULL;
m_status = WB_OPERATION_STATUS_DRAWOBJ;
}
}
}
break;
}
CScrollView::OnMouseMove(nFlags, point);
}