zoukankan      html  css  js  c++  java
  • MapXtreme 2005学习(7):Web页面中实现鼠标中键缩放

    在MapXtreme 2005中,在Windows应用程序中自带鼠标中键缩放的功能,而有Web应用程序中却没有,如果能够实现会显得更加人性化。在百度里面一搜,还真有位高人实现了,于是借鉴了一下,作了一些修改,在这里和大家共享一下,你可能通过修改程序代码,控制每次缩放的比例,也可以选择等差或等比的方式进行缩放,代码比较简单,只要稍作修改就可以实现。

    (1)在页面的</form>之前添加如下JavaScript代码:

    <script type="text/javascript">       
    var Img = document.getElementById("MapControl1_Image");
    if(Img != null)
    {
       Img.attachEvent(
    'onmousewheel', GetMouseWheelEvent);
    }

    function GetMouseWheelEvent()
    {
        
    var mapImage = document.getElementById("MapControl1_Image");
        
    var url = "MapController.ashx?Command=WheelZoom&Width=" + mapImage.width +"&Height=" + mapImage.height
         
    + "&ExportFormat=" + mapImage.exportFormat + "&Ran=" + Math.random() + "&wheelvalue=" + event.wheelDelta;
        
    if (mapImage.mapAlias) 
            url 
    +=  "&MapAlias=" + mapImage.mapAlias;    
        
    try 
        
    {
            mapImage.src 
    = url;
        }

        
    catch(e)
        

            alert(
    "Error!");
        }

    }

    </script>

    (2)在后台代码中,如自定义命令的文件CustomerCommands.cs中的添加如下类:

        [Serializable]
        
    public class WheelZoom : MapBaseCommand
        
    {
            
    public WheelZoom()
            
    {
                Name 
    = "WheelZoom";
            }


            
    public override void Process()
            
    {
                
    int wheelvalue = int.Parse(System.Convert.ToString(HttpContext.Current.Request["wheelvalue"]));
              
                MapControlModel model 
    = MapControlModel.GetModelFromSession();
                model.SetMapSize(MapAlias, MapWidth, MapHeight);
                
    try
                
    {
                    MapInfo.Mapping.Map map 
    = model.GetMapObj(MapAlias);

                    MapInfo.Geometry.Distance d;
                    
    if (wheelvalue > 0)
                    
    {
                        d 
    = new MapInfo.Geometry.Distance(map.Zoom.Value * 0.5, map.Zoom.Unit);
                    }

                    
    else
                    
    {
                        d 
    = new MapInfo.Geometry.Distance(map.Zoom.Value * 2, map.Zoom.Unit);
                    }

                    map.Zoom 
    = d;
                }

                
    finally
                
    {
                    System.IO.MemoryStream ms 
    = model.GetMap(MapAlias, MapWidth, MapHeight, ExportFormat);
                    StreamImageToClient(ms);
                }

            }

        }

    (3)在页面加载处注册Command:

    if(Session.IsNewSession)
    {
        MapControlModel model 
    = MapControlModel.SetDefaultModelInSession();
        model.Commands.Add(
    new WheelZoom());
    }

    完毕,运行在页面地图上滚动鼠标中间键即可看到效果。

  • 相关阅读:
    一个C# usb与mcu通信的程序,附代码
    基于C#音乐播放器(附代码)
    基于C#俄罗斯方块
    FTP方式部署Azure Web App
    微信接口小例
    基于来信码的短信通知平台
    基于Windows服务的WCF
    基于IIS的WCF
    基于.NET的Excel开发:单元格区域的操作(读取、赋值、边框和格式)
    .NET通过RFC读取SAP数据
  • 原文地址:https://www.cnblogs.com/glacierh/p/1263118.html
Copyright © 2011-2022 走看看