7.7.3 地图放大、缩小的实现(3)
函数OnMouseDownMap1()的代码如下:
代码位置:见光盘中本章源代码的CMapPublicView类。
- 1 void CMapPublicView::OnMouseDownMap1(short Button, short Shift, long X, long Y)
- 2 {
- 3 CString str;
- 4 CMoPoint m_CenterPoint; //缩放的中心点
- 5 double m_CenterPointX; //定义双精度类型变量
- 6 double m_CenterPointY;
- 7 CMoRectangle rect_Extent; //定义矩形范围
- 8 double m_TrackRectangle_Heigh; //拉框所选范围的高度
- 9 double m_TrackRectangle_Width; //拉框所选范围的宽度
- 10 CMoRectangle rect; //拉框范围
- 11 double X_Scale; //x 方向拉框比例
- 12 double Y_Scale; //Y方向拉框比例
- 13 double m_Scale; //比例系数
- 14 int x=(int)Info.CalcScale(&m_Map); //比例尺
- 15 str.Format("比例尺 1:%d",x);
- 16 switch(m_CurrentOperation) //选择语句
- 17 {
- 18 case PAN: //漫游
- 19 m_Map.Pan();
- 20 break;
- 21 case ZOOMIN: //放大
- 22 if(x<7000)
- 23 {
- 24 if(!bControlFlag)
- 25 ShowLayer(); //显示图层
- 26 MessageBox("已经到最大");
- 27 break;
- 28 }
- 29 rect=m_Map.TrackRectangle();
- 30 m_TrackRectangle_Heigh=rect.GetHeight()/2;
- 31 m_TrackRectangle_Width=rect.GetWidth()/2;
- 32 if(LPDISPATCH(rect)&&m_TrackRectangle_Heigh!=0&&m_TrackRectangle_
- Width!=0)
- 33 {
- 34 m_Map.SetExtent(rect); //拉框放大
- 35 }
- 36 else //定点放大
- 37 {
- 38 m_CenterPoint=m_Map.ToMapPoint(float(X),float(Y)); //转换成空间坐标
- 39 m_CenterPointm_CenterPointX=m_CenterPoint.GetX();
- 40 m_CenterPointm_CenterPointY=m_CenterPoint.GetY();
- 41 rect_Extent=m_Map.GetExtent(); //获得地图显示范围
- 42 rect_Extent.ScaleRectangle(0.9); //设置放大系数
- 43 m_Map.SetExtent(rect_Extent); //设置地图显示范围
- 44 m_Map.CenterAt(m_CenterPointX,m_CenterPointY); //使图形居中
- 45 }
- 46 Number++;
- 47 if(!bControlFlag)
- 48 {
- 49 ShowLayer();
- 50 }
- 51 break;
第3~15行代码为定义辅助的变量并赋初值。
第18~20行代码为地图的漫游,关于漫游的具体实现将在下面进行详细讲解。
第22~51行代码为地图放大的实现。当用户在地图上单击时,可以获得按下的点的坐标,然后以该点为中心,通过设置比例系数,来实现地图的缩放。