阅读:1858回复:6
在MO中可以移动选择图元的位置吗?
VB好像有人实现了,在vc中呢?
|
|
1楼#
发布于:2003-12-10 13:28
可以给些VC的代码吗?提示提示好吗?
|
|
2楼#
发布于:2003-12-10 16:22
是呀,不知道怎么搞!!
|
|
3楼#
发布于:2003-12-10 16:27
啊,不是这样的,而是我先选择到一线,然后按下鼠标拖动,选择的线也随着拖动!!
|
|
4楼#
发布于:2003-12-10 16:44
你得自己除了鼠标相应的,MO没有直接提供方法,不过可以参考一下Offset
[此贴子已经被作者于2003-12-10 16:45:56编辑过]
|
|
|
5楼#
发布于:2003-12-10 20:24
看来,MO用VB的多呀!!!!
|
|
6楼#
发布于:2003-12-11 13:46
已经实现了!为了感谢同志们的帮忙,我特别贴到此!
void CMapObjectTestView::OnMouseMoveMap1(short Button, short Shift, long X, long Y) { if( Button == 1 ) { m_selPointRecSet.MoveFirst(); m_selLineRecSet.MoveFirst(); m_selPolygonRecSet.MoveFirst(); if( m_selObject ) { //如果选择的是点 if( m_selObject.GetType() == moShapeTypePoint ) { CMoPoint * pPoint = new CMoPoint(); pPoint->AttachDispatch(m_selObject.GetValue().pdispVal); CMoRectangle rect = CMoRectangle(); if( !rect.CreateDispatch(TEXT("MapObjects2.Rectangle"))) { MessageBox("选择点时生成的点矩形有误!!!"); return ; } VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; rect.SetLeft( pPoint->GetX() - 1 ); rect.SetTop( pPoint->GetY() + 1 ); rect.SetRight( pPoint->GetX() + 1 ) ; rect.SetBottom( pPoint->GetY() - 1 ) ; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; m_map.RefreshRect( rect ); pPoint->Set( pt.GetX() , pt.GetY() , 0 , 0 ); m_selPointRecSet.Edit(); va.pdispVal = pPoint->m_lpDispatch; m_selObject.Set_Value( va ); //m_selPointRecSet.GetFields("shape"); m_selPointRecSet.Update(); m_selPointRecSet.StopEditing(); //为了使水平和垂直线都能很好的显示 rect.SetLeft( pt.GetX() - 1 ); rect.SetTop( pt.GetY() + 1 ); rect.SetRight( pt.GetX() + 1 ) ; rect.SetBottom( pt.GetY() - 1 ) ; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer1(m_map.GetTrackingLayer()); tLayer1.Refresh(true, va); m_map.RefreshRect( rect ); } //如果选择的是线 else if( m_selObject.GetType() == moShapeTypeLine ) { if( m_x == 0 && m_y == 0) { m_x = pt.GetX(); m_y = pt.GetY(); } else { CMoLine * pLine = new CMoLine(); pLine->AttachDispatch(m_selObject.GetValue().pdispVal); CMoRectangle rect = CMoRectangle(); if( !rect.CreateDispatch(TEXT("MapObjects2.Rectangle"))) { MessageBox("选择点时生成的点矩形有误!!!"); return ; } VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; rect = pLine->GetExtent(); VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; m_map.RefreshRect( rect ); pLine->Offset( pt.GetX() - m_x , pt.GetY() - m_y ); m_x = pt.GetX(); m_y = pt.GetY(); m_selLineRecSet.Edit(); va.pdispVal = pLine->m_lpDispatch; m_selObject.Set_Value( va ); m_selLineRecSet.Update(); m_selLineRecSet.StopEditing(); //为了使水平和垂直线都能很好的显示 rect.SetLeft( pLine->GetExtent().GetLeft() ); rect.SetTop( pLine->GetExtent().GetTop() ); rect.SetRight( pLine->GetExtent().GetRight() ) ; rect.SetBottom( pLine->GetExtent().GetBottom() ) ; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer1(m_map.GetTrackingLayer()); tLayer1.Refresh(true, va); m_map.RefreshRect( rect ); } } //如果选择的是面 else if( m_selObject.GetType() == moShapeTypePolygon ) { if( m_x == 0 && m_y == 0) { m_x = pt.GetX(); m_y = pt.GetY(); } else { CMoPolygon * pPolygon = new CMoPolygon(); pPolygon->AttachDispatch(m_selObject.GetValue().pdispVal); CMoRectangle rect = CMoRectangle(); if( !rect.CreateDispatch(TEXT("MapObjects2.Rectangle"))) { MessageBox("选择点时生成的点矩形有误!!!"); return ; } VARIANT va; VariantInit(&va); va.vt = VT_DISPATCH; rect = pPolygon->GetExtent(); VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; m_map.RefreshRect( rect ); pPolygon->Offset( pt.GetX() - m_x , pt.GetY() - m_y ); m_x = pt.GetX(); m_y = pt.GetY(); m_selPolygonRecSet.Edit(); va.pdispVal = pPolygon->m_lpDispatch; m_selObject.Set_Value( va ); m_selPolygonRecSet.Update(); m_selPolygonRecSet.StopEditing(); //为了使水平和垂直线都能很好的显示 rect.SetLeft( pPolygon->GetExtent().GetLeft() ); rect.SetTop( pPolygon->GetExtent().GetTop() ); rect.SetRight( pPolygon->GetExtent().GetRight() ) ; rect.SetBottom( pPolygon->GetExtent().GetBottom() ) ; VariantInit(&va); va.vt = VT_DISPATCH; va.pdispVal = rect.m_lpDispatch; CMoTrackingLayer tLayer1(m_map.GetTrackingLayer()); tLayer1.Refresh(true, va); m_map.RefreshRect( rect ); } } } } } |
|