• ArcEngnine中IHookHelper的用法


    一、IHookHelper 主要在用在自定义类型于AE带的的ICommand或ITool等

    1.实例化IHookHelper 对象:
    IHookHelper m_hookHelper = new HookHelperClass(); 
    m_hookHelper.Hook = this.axMapControl1.Object ;//这样就可以把AxMapControl传递给其它要用到的地方。

    2.通过IHookHelper,获取地图控件和主窗体:

    IntPtr pHandle = new IntPtr (m_hookHelper.ActiveView.ScreenDisplay.hWnd);
    axMapControl1 = System.Windows.Forms.Form.FromHandle(pHandle) as AxMapControl;//对这个地图控件对象操作,会直接反应到主窗体的地图控件上

    Form. MainForm. = Form.FromHandle(pHandle).FindForm();//这里的主窗体对象之后运行时能起作用,MainForm. 不能直接访问到主窗体里的变量。

    3.通过IHookHelper,获取IActiveView和IMap对象

    再通过IHookHelper.ActiveView和IHookHelper.FocusMap属性来获取IActiveView和IMap对象,通过这两个接口进行更一步的操作.

    4.通过IHookHelper,操作地图

    IHookActions hookActions= m_hookHelper as IHookHelper;
    获取IHookActions,再通过IHookActions进行Flash,Pan,ZoomTo操作.

    二、HOOK实际是一个对象传出的自身的引用或者叫指针或者叫句柄。 
    例如一个程序,加载一个dll内的对象时通过把Hook传递给要调用的对象,
    这样dll内的对象就得到了应用程序传递给他的这个hook,
    对象可以通过这个hook查看程序内部的结构。
    实际实现时就是对象间传递指向自身的指针传递给另一个对象。

    IHookHelper m_hookHelper=new HookHelperClass();
    m_hookHelper.Hook=axMapControl1.Object;
     //这样就获得了axMapControl1控件的一个引用
    然后通过m_hookHelper.ActiveView可以获得原axMapControl1的ActiveView项,
    用m_hookHelper.FocusMap可以获得IMap对象

    三、ESRI帮助文档中对IHookHelper的介绍

  • 相关阅读:
    为什么每天都在学习,生活还是没有任何改善?
    MySql基础汇总
    BeanUtils.copyProperties(待复制对象, 待更新对象) || PropertyUtils.copyProperties(待更新对象, 待复制对象)
    ThreadLocal
    synchronized 锁
    STS报could not find tools.jar in the active JRE
    SpringBoot 定时任务 || cron表达式
    lombok注解
    cron表达式
    Thymeleaf 模板引擎
  • 原文地址:https://www.cnblogs.com/GISQZC/p/5400382.html
Copyright © 2020-2023  润新知