从零开始:AE二次开发中获取A点到B点的最佳路径(3)

本文探讨了解决WPF中MapControl加载地图后无法响应鼠标滚轮缩放的问题,并介绍了一个通过保持MapControl焦点的方法来解决问题的具体实现。此外,还讲解了QueryInterface的用途及其在不同接口间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在上一篇中,我说明了如何将MapControl添加到WPF中。

在添加过程我,我发现MapControl无法正常接收鼠标滚轮的放大缩小事件,期初我认为是由于MapControl放入WindowsFormsHost中,导致鼠标滚轮事件被WindowsFormsHost接收处理,MapControl并没有接收到鼠标滚轮事件。但是经过测试,发现这是错误的观点,因为WindowsFormsHost根本不会响应我的MouseWheel事件,也谈不上接收处理了。后来我发现在未加载地图时,MapControl可以正常的接收MouseWheel事件,但是加载完地图后就不支持了;根据这个情况,我推断可能是因为当加载地图后,MapControl失去了焦点,所以无法正常响应mouseWheel。MapControl是我在后台用代码添加的,打开地图文件我使用的是一个Button_Click事件,我在这个事件中设置了 this.MapControl.focus();确保每次加载地图后,MapControl都可以获取到焦点,然后就可以执行mousewheel事件,但是如过通过ToolBarcontrol 打开地图就又会失去焦点了,因此我在窗体的构造器中添加了

mapControl.OnMouseDown+=new IMapControlEvents2_AX_OnMouseDownEventHanlder(mapControl_OnMouseDown)
在它的mouseDown中添加Focus(),可以很好的解决这个问题。(PS:这只是我自己想的一个方法,无法保证每个人都适用或者一定正确,如何你们觉得这个方法有问题或者有更好的建议,请提出你们的建议,我们大家都可以学习学习)

由于在使用Network dataset分析时,会用到Query Interface,所有在此,对Quert Interface进行说明:

Quert Interface :一个类可以游多个接口,声明了接口变量并且指向一个对象的时候,这个对象只能使用该接口内的方法和属性,而不能访问其他接口中的方法和属性。如:

Dim pMap as IMap Set pMap=New Map pMay.Clear 这里会产生错误:此时的pMap只能使用IMap接口中定义的方法和属性,如获取图层的个数,添加图层等,但是不能清空视图上的内容(清空方法在IActiveView中定义) QueryInterface(QI)很方便的让我们在一个类的不同接口间进行切换:

Dim pView as IActiveView set pView=pMap ,此时可以使用pView调用在IActiveView中定义的方法。

例子如下:

 interface IRose
    {
        void GirlName();
    }
 interface ITom
    {
        void BoyName();
    }

 class QITest:ITom,IRose
    {
        #region IRose 成员

        public void GirlName()
        {
            MessageBox.Show("My Name is Rose");
        }

        #endregion

        #region ITom 成员

        public void BoyName()
        {
            MessageBox.Show("My Name is Tom");
        }

        #endregion
    }
 private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            IRose nameinfo = new QITest();
            nameinfo.GirlName();
            //nameinfo.BoyName();// 报错
            ITom boyname = nameinfo as ITom;
            boyname.BoyName();
        }

我没有在IRose中声明 BoyName方法,因此无法直接使用。当我

ITom boyname = nameinfo as ITom;
后,boyname可以正常使用ITom中定义的方法了。

Network dataset分析需要先创建无向网络。无向网络的创建分为在ArcCatalog中创建和在C#使用代码创建。

在ArcCatalog中创建无向网络只需要在FeatureSet 中右键,选择网络数据集向导,根据提示进行一步步的操作即可,具体我就不再多阐述了。

C#代码创建无向网络我是根据ArcGIS Engine 10 开发手册  进行编写的。基本与书上代码一致,需要这本书可以去这个链接下载,不需要资源分。点击打开链接http://download.youkuaiyun.com/detail/f815501810/7110923




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值