在MAPX中如何移动 图元(即部件) 的位置

allenjiao 2011-03-15 11:55:37
这是移动图元的代码
double dX=5.0001, dY=5.0005;
CMapXLayer m_Rangelayer = m_ctrlMapX.GetLayers().Item("Stlayer");
CMapXFeatures m_Features = m_Rangelayer.AllFeatures();

m_ctrlMapX.SetAutoRedraw(FALSE);
m_Rangelayer.SetEditable(TRUE);

m_Features.Item(1).Offset(dX, dY);
m_Features.Item(1).Update();

m_ctrlMapX.SetAutoRedraw(TRUE);



这是创建图元的代码(单击鼠标位置创建图元 x y 分别是鼠标坐标)
double m_dMapXX=30,m_dMapXY=30;
float mXk,mYk;
mXk = x; //在屏幕上取得圆形的绘图范围 //如果不转换 由于经纬度之间的差距 并不是一个正圆
mYk = y;
m_ctrlMapX.ConvertCoord( &mXk,&mYk,&m_dMapXX,&m_dMapXY, miScreenToMap );
CMapXLayer pLayer =m_ctrlMapX.GetLayers().Item("Stlayer");
//创建点图元
CMapXPoint point;
point.CreateDispatch(point.GetClsid());
point.Set(m_dMapXX,m_dMapXY);
//创建图元样式
CMapXStyle style;
style.CreateDispatch(style.GetClsid());
style.SetSymbolType(miSymbolTypeBitmap);
style.SetSymbolBitmapSize(15);
style.SetSymbolBitmapName(_T("TRUC1-32.BMP"));


////设置MapX不进行自动更新
m_ctrlMapX.SetAutoRedraw(FALSE);
////设置图层可写
pLayer.SetEditable(TRUE);

//创建特征对象
VARIANT varPoint;
VARIANT varStyle;
varPoint.vt = VT_DISPATCH;
varPoint.pdispVal = point;
varStyle.vt = VT_DISPATCH;
varStyle.pdispVal = style;
CMapXFeatureFactory factory = m_ctrlMapX.GetFeatureFactory();
CMapXFeature feature = factory.CreateSymbol(varPoint,varStyle);
feature.SetKeyValue("car information");

//添加到图层
pLayer.AddFeature(feature);

//pLayer.Refresh();

//设置MapX进行自动更新
m_ctrlMapX.SetAutoRedraw(TRUE);
//设置图层不可写
//pLayer.SetEditable(FALSE);

****************************************
问题:
图元只闪烁但是不移动。不知道到底是为什么?
...全文
446 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojunder 2012-04-30
  • 打赏
  • 举报
回复
还是有创意的!
wrongbob 2012-04-30
  • 打赏
  • 举报
回复
楼主的做法很棒啊!我的问题也解决了
1楼的
//Modify
CMapXFeature testFet=m_Features.Item(1);

这个很重要,不加的话会出现:不能操作独立的特性的错误!

lrl198801 2012-02-10
  • 打赏
  • 举报
回复
突然又能动了,更纠结了~
lrl198801 2012-02-10
  • 打赏
  • 举报
回复
CMapXLayer m_Rangelayer = m_ctrlMapX.GetLayers().Item(_T("LineLayer"));
CMapXFeatures m_Features = m_Rangelayer.AllFeatures();
m_Rangelayer.SetEditable(TRUE);
if(m_Features.GetCount() > 0)
{
m_ctrlMapX.SetAutoRedraw(FALSE);
CMapXFeature testFet=m_Features.Item(1);
testFet.Offset(deltaX,deltaY);
testFet.Update();
m_ctrlMapX.SetAutoRedraw(TRUE);
}

使用Offset也能够移动。

但是对于绘制的图形,这样就移动不了,求哪位大侠给些解释。例如,
CMapXPoint m_pt;
m_pt.CreateDispatch(m_pt.GetClsid());
m_pt.Set(X,Y);

CMapXFeature m_feature = m_ctrlMapX.GetFeatureFactory().CreateCircularRegion(miCircleTypeScreen,m_pt,80,1);
m_ctrlMapX.GetLayers().Item(_T("Layer")).AddFeature(m_feature);
以上代码绘制得到的一个圆。

无法用以上的办法移动啊~纠结好几天了~
lrl198801 2012-02-06
  • 打赏
  • 举报
回复

此帖地道哥~
mingkangfu 2011-10-14
  • 打赏
  • 举报
回复
谢谢,你的解决方案!
wangxi103 2011-07-07
  • 打赏
  • 举报
回复
自己解决了,能把答案贴出来是好习惯,谢谢!
allenjiao 2011-03-15
  • 打赏
  • 举报
回复
自己解决了
allenjiao 2011-03-15
  • 打赏
  • 举报
回复
double dX=5.0001, dY=5.0005;
CMapXLayer m_Rangelayer = m_ctrlMapX.GetLayers().Item("Stlayer");
CMapXFeatures m_Features = m_Rangelayer.AllFeatures();

m_ctrlMapX.SetAutoRedraw(FALSE);
m_Rangelayer.SetEditable(TRUE);

//Modify
CMapXFeature testFet=m_Features.Item(1);
testFet.GetPoint().Set(109.4966+iSize,31.49333+iSize);
testFet.Update();

m_ctrlMapX.SetAutoRedraw(TRUE);
这样图元就能移动了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧