как добраться до mapcontrol через?

0 голосов
спросил 31 Авг, 07 от sschainik (4,900 баллов) в категории Программные продукты Esri
    Привет форумчане!
Как добраться до mapcontrol через hook?
Следующий код не помогает:

Private Sub ICommand_OnCreate(ByVal Hook As Object)
If TypeOf Hook Is esriMapControl.MapControl Then
        pTypeHook = 1
ElseIf TypeOf Hook Is esriPageLayoutControl.PageLayoutControl Then
        pTypeHook = 2
    Else
        pTypeHook = 0
End If

И как кого всетаки типа объект hook?

3 Ответы

0 голосов
ответил 31 Авг, 07 от new_sergei (2,660 баллов)
    Ïđèâạ̊ ôîđó́÷àíå!
Êàê äîáđạ̀üñÿ äî mapcontrol ÷åđåç hook?
Ñëåäó₫ùèé êîä íå ïî́îăàạ̊:

Private Sub ICommand_OnCreate(ByVal Hook As Object)
If TypeOf Hook Is esriMapControl.MapControl Then
        pTypeHook = 1
ElseIf TypeOf Hook Is esriPageLayoutControl.PageLayoutControl Then
        pTypeHook = 2
    Else
        pTypeHook = 0
End If

È êàê êîăî âñạ̊àêè ̣èïà îáúåệ hook?
 
В хелпе по с++ написано, что hook - это указатель на интерфейс IDispatch. Копай в ту сторону.
0 голосов
ответил 01 Сен, 07 от Alexander1 (32,520 баллов)
IHookHelper Interface


VB.NET:
'.............................................
Private m_hookHelper As IHookHelper
'.............................................

''' <summary>
''' Occurs when this command is created
''' </summary>
''' <param name="hook">Instance of the application</param>
Public Overrides Sub OnCreate(ByVal hook As Object)
    If hook Is Nothing Then
    Return
    End If

    If m_hookHelper Is Nothing Then
    m_hookHelper = New HookHelperClass()
    End If

    m_hookHelper.Hook = hook

    ' TODO: Add other initialization code
End Sub

Public Overrides Sub OnClick()
    Dim hook As Object = Nothing
    If TypeOf m_hookHelper.Hook Is IToolbarControl2 Then
    hook = (CType(m_hookHelper.Hook, IToolbarControl2)).Buddy
    Else
    hook = m_hookHelper.Hook
    End If

    Dim mapControl As IMapControl3 = Nothing
    If TypeOf hook Is IMapControl3 Then
    mapControl = CType(hook, IMapControl3)

End Sub
---------------------------------------------------------

C#:

//.....................................................
private IHookHelper m_hookHelper;
//.....................................................

    /// <summary>
    /// Occurs when this command is created
    /// </summary>
    /// <param name="hook">Instance of the application</param>
    public override void OnCreate(object hook)
    {
      if (hook == null)
        return;

      if (m_hookHelper == null)
        m_hookHelper = new HookHelperClass();

      m_hookHelper.Hook = hook;

      // TODO: Add other initialization code
    }



    public override void OnClick()
    {
      //nedd to get the layer from the custom-property of the map
      if (null == m_hookHelper)
        return;

      //get the mapControl hook
      object hook = null;
      if (m_hookHelper.Hook is IToolbarControl2)
      {
        hook = ((IToolbarControl2)m_hookHelper.Hook).Buddy;
      }
      else
      {
        hook = m_hookHelper.Hook;
      }

      IMapControl3 mapControl = null;
      if (hook is IMapControl3)
      {
        mapControl = (IMapControl3)hook;
        customProperty = mapControl.CustomProperty;
      }
      else
        return;
    }
    
    
0 голосов
ответил 03 Сен, 07 от sschainik (4,900 баллов)
спасибо усё заработало
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...