jxdnzhang
路人甲
路人甲
  • 注册日期2004-09-09
  • 发帖数4
  • QQ
  • 铜币118枚
  • 威望0点
  • 贡献值0点
  • 银元0个
阅读:1271回复:2

如何用VC#编写鹰眼???

楼主#
更多 发布于:2004-10-15 13:41
<P>赐教!!!</P>
喜欢0 评分0
selan1
路人甲
路人甲
  • 注册日期2004-10-16
  • 发帖数12
  • QQ
  • 铜币128枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2004-11-03 18:33
<P>VC下鹰眼图的实现</P><P>m_ctrlMapX.Create(NULL, WS_VISIBLE, CRect(0,0,300,300), this, IDC_MAP1);</P><P>m_eagleMapx.Create(NULL, WS_VISIBLE, CRect(0,0,400,400), this,IDC_MAP2);</P><P>另外在初始化程序时,还需创建一个图层,用于显示鹰眼图上矩形Feature。</P><P>m_eagleMapx.GetLayers().CreateLayer("RectLayer");</P><P>鹰眼图的主要功能是在主图发生变化时,在鹰眼图上用变化的矩形框来显示当前主图显示的边界。这里主要利用MapX 控件内置的消息MAPX_DISPID_MAPVIEWCHANGED映射的函数来完成该功能,当主视图发生变化时,MapX 控件发出消息,调用OnMapViewChanged()函数进行相应的处理,所以主要的代码在OnMapViewChanged()函数中实现。</P><P>ON_EVENT(CMapXSampleView, IDC_MAP1, MAPX_DISPID_MAPVIEWCHANGED, OnMapViewChanged, VTS_NONE)</P><P>//主视图发生变化时,调用如下的函数</P><P>void CMapXSampleView::OnMapViewChanged() </P><P>{</P><P>       double X1,Y1,X2,Y2;                                      //声明坐标变量</P><P>       double x2,y2,x4,y4;                               //声明坐标变量</P><P>    VARIANT scx, scy, scx1, scy1;                           //声明屏幕坐标变量</P><P>        VARIANT mapx1,mapy1,mapx2,mapy2;           //声明地图坐标变量</P><P>    //声明FeatureFactory变量并获取缺省值</P><P>       CMapXFeatureFactory cFactory=m_eagleMapx.GetFeatureFactory();</P><P>       CMapXLayer  layer;                                    //声明图层变量</P><P>       CMapXFeature feature;                            //声明Feature变量</P><P>       CMapXFeatures features;                                 //声明Features变量</P><P>       CMapXPoints points;                                    //声明Points变量</P><P>       points.CreateDispatch(points.GetClsid());</P><P>       CMapXRectangle rect;                                   //声明矩形变量</P><P>       rect.CreateDispatch(rect.GetClsid());</P><P>       //获取主图的边界,根据这个边界值,在鹰眼图上添加一个矩形Feature</P><P>      rect = m_ctrlMapX.GetBounds();</P><P>       X1 = rect.GetXMin();                                     //获得矩形左上顶点x坐标</P><P>       Y1 = rect.GetYMin();                                     //获得矩形左上顶点y坐标</P><P>       X2 = rect.GetXMax();                             //获得矩形右下顶点x坐标</P><P>       Y2 = rect.GetYMax();                             //获得矩形右下顶点y坐标</P><P>        //进行坐标变换</P><P>       m_eagleMapx.ConvertCoordV(;scx,;scy,COleVariant(X1),COleVariant(Y1),miMapToScreen);</P><P>       m_eagleMapx.ConvertCoordV(;scx1,;scy1,COleVariant(X2),COleVariant(Y2),miMapToScreen);</P><P>       m_eagleMapx.ConvertCoordV(;scx,;scy1,;mapx1,;mapy1,miScreenToMap);</P><P>       m_eagleMapx.ConvertCoordV(;scx1,;scy,;mapx2,;mapy2,miScreenToMap);</P><P>                            </P><P>//获得矩形框顶点坐标</P><P>       x2= mapx1.dblVal;                           </P><P>       y2=mapy1.dblVal;</P><P>       x4=mapx2.dblVal;</P><P>       y4=mapy2.dblVal;</P><P>       //得到添加矩形Feature的图层</P><P>       layer=m_eagleMapx.GetLayers().Item("RectLayer");</P><P>       features=layer.AllFeatures();</P><P>       //没有添加矩形Feature的图层,则新建</P><P>       if(features.GetCount() == 0)</P><P>       {</P><P>//添加四个顶点构成一个矩形框</P><P>              points.AddXY(X1,Y1);                                        //添加顶点1</P><P>              points.AddXY(x2,y2);                                                  //添加顶点2</P><P>              points.AddXY(X2,Y2);                                                      //添加顶点3</P><P>              points.AddXY(x4,y4);                                                        //添加顶点4</P><P>//创建矩形Feature</P><P>              COleVariant vtPoints;</P><P>              vtPoints.vt = VT_DISPATCH;</P><P>              vtPoints.pdispVal = points.m_lpDispatch;</P><P>              vtPoints.pdispVal->AddRef();</P><P>              feature=cFactory.CreateRegion(vtPoints); </P><P>              //设置矩形Feature的属性</P><P>              CMapXStyle style=feature.GetStyle();</P><P>              style.SetRegionPattern(miPatternNoFill);                //设置矩形的填充方式</P><P>              style.SetRegionBorderColor(miColorRed);                //设置矩形边框颜色</P><P>              style.SetRegionBorderWidth(2);                         //设置矩形边框宽度</P><P>              feature.SetStyle(style.m_lpDispatch);</P><P>              //添加已经创建的矩形Feature</P><P>              m_eaglefeature = layer.AddFeature(feature);</P><P>       }</P><P>       else     //否则更新Feature的矩形大小与位置</P><P>       {</P><P>              m_eaglefeature.GetParts().Item(1).RemoveAll();            //除去已有的顶点</P><P>              m_eaglefeature.GetParts().Item(1).AddXY(X1,Y1);        //添加顶点1</P><P>              m_eaglefeature.GetParts().Item(1).AddXY(x2,y2);             //添加顶点2</P><P>              m_eaglefeature.GetParts().Item(1).AddXY(X2,Y2);           //添加顶点3</P><P>              m_eaglefeature.GetParts().Item(1).AddXY(x4,y4);             //添加顶点4</P><P>              m_eaglefeature.Update();                                                     //更新Feature属性</P><P>       }</P><P>       //更新显示图层</P><P>       layer.Refresh();</P><P>}</P>
举报 回复(0) 喜欢(0)     评分
gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
2楼#
发布于:2004-11-04 11:33
<img src="images/post/smile/dvbbs/em01.gif" />楼上滴
GIS麦田守望者,期待与您交流。
举报 回复(0) 喜欢(0)     评分
游客

返回顶部