中国地图
GIS探索者
地图网
GIS论坛
网站首页| GIS论坛 |新闻动态 | 技术专栏 | GIS书籍 | 资源下载 | 求职招聘 | 研究生考试 | GIS博客 | GIS空间站
欢迎光临GIS空间站!   网站地图
  专栏导航:| ArcGIS | MapInfo | TopMap | 地理信息 | 遥感 | GPS | 测绘 | WebGIS | LBS | 前沿 | 数据库 | 开发 | 行业应用
  推荐栏目:| AO开发 | 业界动态 | GIS资源 | 招聘信息 | 求职简历 | 共享软件 | 电子书籍 | 研究生考题 | 电子期刊 | GIS论文
您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> AO开发 >> 文章正文

AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(2)续

作者:Snoopy    文章来源:中国3S网站(httpwww.863s.com)    点击数:    更新时间:2006-12-11
TopMap活动

在鼠标事件函数中添加如下代码(红色部分):

void CAOExStep1View::OnonMouseDownMapcontrol1(long button, long shift, long x, long y, double mapX, double mapY)

{

     if(1 == button) // 鼠标左键按下

     {

         IActiveViewPtr ipActiveView;

         HRESULT hr=m_ipMapControl->get_ActiveView(&ipActiveView);

         if (ipActiveView == NULL) return ;

         switch(m_ARTool)

         {

         case esriARToolNoneSelected:

         {

                 break;

         }

         case esriARToolMapZoomIn: // 地图放大

         {

               IEnvelopePtr ipEnvelope;

               hr = ipActiveView->get_Extent(&ipEnvelope);

               if (FAILED(hr)) return ;

               hr = m_ipMapControl->TrackRectangle(&ipEnvelope);

               if (FAILED(hr)) return ;

               if(ipEnvelope == NULL) return ;

              double XMin,YMin,XMax,YMax;

              XMin=YMin=XMax=YMax=0.0;

               if(S_OK !=ipEnvelope->get_XMin(&XMin)) XMin = 0.0;

               if(S_OK !=ipEnvelope->get_YMin(&YMin)) YMin = 0.0;

               if(S_OK !=ipEnvelope->get_XMax(&XMax)) XMax = 0.0;

               if(S_OK !=ipEnvelope->get_YMax(&YMax)) YMax = 0.0;

               if(XMin!=XMax&&YMin!=YMax)           // 用户拉框选择区域放大

               {

                     ipActiveView->put_Extent(ipEnvelope);

                     ipActiveView->Refresh();

               }

               else       // 用户点击进行放大

                  {

                     ipActiveView->get_Extent(&ipEnvelope);

                     if (FAILED(hr)) return ;

                     IPointPtr ipPoint(CLSID_Point);

                     ipPoint->put_X(mapX);

                     ipPoint->put_Y(mapY);

                      // 设置中心点为用户点击为主

                      ipEnvelope->CenterAt(ipPoint);

                      ipEnvelope->Expand(0.5, 0.5, true);

                      ipActiveView->put_Extent(ipEnvelope);

                      ipActiveView->Refresh();

                 }

           }

           break;

           case esriARToolMapZoomOut: // 地图缩小

           {

                 IEnvelopePtr ipEnvelope;

                 hr = ipActiveView->get_Extent(&ipEnvelope);

                 if (FAILED(hr)) return ;

                 IPointPtr ipPoint(CLSID_Point);

                 ipPoint->put_X(mapX);

                 ipPoint->put_Y(mapY);

                 ipEnvelope->CenterAt(ipPoint);

                 // 设置中心点为用户点击为主

                 ipEnvelope->Expand(2, 2, true);

                 ipActiveView->put_Extent(ipEnvelope);

                 ipActiveView->Refresh();

              }

              break;

              case esriARToolMapPan: // 地图平移

              {

                     m_ipMapControl->Pan();

               }

               break;

               default:

                             break;

               }

     }         

}

为工具栏前四个按钮添加UPDATE_COMMAND_UI更新函数,代码如下:

//////////////////////////////////////////////////////////////////////////

// 更新工具栏

void CAOExStep1View::OnUpdateMapArrow(CCmdUI* pCmdUI)

{

     pCmdUI->SetCheck(m_ARTool == esriARToolNoneSelected);

} 

void CAOExStep1View::OnUpdateMapPan(CCmdUI* pCmdUI)

{

     pCmdUI->SetCheck(m_ARTool == esriARToolMapPan);

} 

void CAOExStep1View::OnUpdateMapZoomin(CCmdUI* pCmdUI)

{

     pCmdUI->SetCheck(m_ARTool == esriARToolMapZoomIn);

} 

void CAOExStep1View::OnUpdateMapZoomout(CCmdUI* pCmdUI)

{

     pCmdUI->SetCheck(m_ARTool == esriARToolMapZoomOut);

}

保存修改,编译程序。运行就可以对地图进行放大、缩小、平移、显示全图的操作了(如下图)。

三、本章小结

上面我们添加了地图漫游的功能,并使地图窗口随框架窗口一起缩放。你可能发现我们的程序加载的地图是在设置MapControl控件属性时指定的。我们在下一节中将实现从shp文件加载地图,并实现图层管理的一些功能

文章录入:gissky    责任编辑:gissky  发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
■■相 关 图 书:
■■相 关 文 章:
  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)续2

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)续1

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(3)

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(2)

  • AO开发笔记(实战篇)-用VC+AO开发独立的应用程序(1)

  • 上一篇文章:

  • 下一篇文章:
  •  
    GIS博客精华
    热点文章
    热门资源
     
    关于我们 | 联系我们 | 广告服务 | 友情链接 | 申请链接 | 合作联盟 | 诚聘英才
      GIS空间站(GISSky.Net)版权所有 站长:兔八哥