aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1858回复:6

在MO中可以移动选择图元的位置吗?

楼主#
更多 发布于:2003-12-09 23:20
VB好像有人实现了,在vc中呢?
喜欢0 评分0
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2003-12-10 13:28
可以给些VC的代码吗?提示提示好吗?
举报 回复(0) 喜欢(0)     评分
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2003-12-10 16:22
是呀,不知道怎么搞!!
举报 回复(0) 喜欢(0)     评分
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2003-12-10 16:27
啊,不是这样的,而是我先选择到一线,然后按下鼠标拖动,选择的线也随着拖动!!
举报 回复(0) 喜欢(0)     评分
zdq
zdq
路人甲
路人甲
  • 注册日期2003-07-29
  • 发帖数60
  • QQ
  • 铜币256枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2003-12-10 16:44
你得自己除了鼠标相应的,MO没有直接提供方法,不过可以参考一下Offset


[此贴子已经被作者于2003-12-10 16:45:56编辑过]
数字排水平台软件 http://digitalwater.cn
举报 回复(0) 喜欢(0)     评分
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
5楼#
发布于:2003-12-10 20:24
看来,MO用VB的多呀!!!!
举报 回复(0) 喜欢(0)     评分
aicai
路人甲
路人甲
  • 注册日期2003-11-18
  • 发帖数191
  • QQ
  • 铜币740枚
  • 威望0点
  • 贡献值0点
  • 银元0个
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 );
}
}
}
}



举报 回复(0) 喜欢(0)     评分
游客

返回顶部