VC中mapx图元颜色的改变

来源:互联网 发布:spark 用户画像算法 编辑:程序博客网 时间:2024/04/30 14:23
各位高人,我求VC中mapx图元颜色改变的方法。具体:
我在VC中嵌入了mapx控件,基本功能已经实现,现在想做到:当鼠标点击(单、双都可)某个图元(如矩形)时,该图元颜色改变;鼠标移动到另外某个图元并进行鼠标点击时,上一个颜色改变效果撤消,新图元变色效果出现!!!

万分感谢!!!!!!!!!!!!!!!
大家帮帮忙啊!!
大家帮帮忙啊!!怎么高手都眼睁睁的看着不说话啊??55555
我自己又写了段代码,想实现如下功能:
鼠标点击某个图元时,颜色改变。有1、2两个图层,1中主要是区域,2中主要是线。我自己感觉这段代码应该没有什么问题,可是点击后没有什么改变。

请高手帮忙!!!


void CMy001View::OnLButtonDown(UINT nFlags, CPoint point)
{
  // TODO: Add your message handler code here and/or call default
  CMapXLayers layers;
  CMapXFeature mapxFeature1,mapxFeature2;
  CMapXStyle mapxStyle;
  CMapXLayer layer;
  CMapXFeatures ftrs1,ftrs2;
  CMapXPoint pnt;

     layers = m_ctrlMapX.GetLayers();
  ftrs1=layers.Item(1).SearchAtPoint(LPDISPATCH(pnt));
  ftrs2=layers.Item(2).SearchAtPoint(LPDISPATCH(pnt));
  mapxFeature1=ftrs1.Item(1);
  mapxFeature2=ftrs2.Item(1);

 
  if (mapxFeature1.GetType()==miFeatureTypeRegion)
  {
   pnt.CreateDispatch(pnt.GetClsid());
   layer.SetOverrideStyle(true);
   mapxStyle=mapxFeature1.GetStyle();
   mapxStyle.SetRegionBackColor(miColorLimeGreen);
   mapxFeature1.SetStyle(mapxStyle);
   mapxFeature1.Update();

  }
  else if (mapxFeature2.GetType()==miFeatureTypeLine)
  {
   pnt.CreateDispatch(pnt.GetClsid());
   layer.SetOverrideStyle(true);
   mapxStyle=mapxFeature2.GetStyle();
      mapxStyle.SetLineColor(miColorLimeGreen);
      mapxFeature2.SetStyle(mapxStyle);
      mapxFeature2.Update();
  }

  CFormView::OnLButtonDown(nFlags, point);

}
没有用vc做过,不过看你的代码中有layer.SetOverrideStyle(true); 这句让图层的样式替换为真,这是对整个图层里的所有图元进行同类型的样式改变,那么你对被选择图元所作的颜色改变都会看不出来的。

而且也看不出来当被选择图元在被取消选择后的恢复原色的代码啊。

谢谢楼上的,请详细指导下!!
前面的代码只要把layer.SetOverrideStyle(true); 这句不要应该可以看到改变的颜色吧。
还有设置区域颜色好像是用Style.RegionColor 属性吧
还有应该要用自定义工具或者箭头工具,如果用选择工具,它有自己的被选中后的样式,那样子不知道颜色会不会有冲突呢。
非常感谢,马上去试!!
感觉已经和正确的方法接近了,可是尝试了还是不行啊,感谢大家,继续求助!!
如果在选择之后变色的话,可以考虑对selection集合的样式做设置
恩,帮顶一下
恩,我也想知道
我对一个线图元是这样做的
   pTempFeature.GetStyle().SetLineColor(32767);
   pTempFeature.Update();
颜色就变了,其他的是不是也差不多阿?

原创粉丝点击