Официальный форум российского программного комплекса T-FLEX PLM


Поиск  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
Plugin EventHandlers in C++/CLI, Обработчики событий ...EventHandler для плагина не срабатывают
 
Добрый день, пишу плагин на С++/CLI и мне нужны события вида и документа и другие от плагина (обработчики которых заканчиваются на ...EventHandler). Но ни одно из них не приходит. Однако OnInitialize, OnCreateTools, OnCommand, OnUpdateCommand работают и все запускается сначала. Так же временно добавил событие делегата ChangingFloatingWindowDocumentEventHandler - он работает.
Код
public ref class My_Factory : public PluginFactory
{
public:
   virtual Plugin^ CreateInstance() override;
   property Guid ID {
      Guid get() override
      {
         return Guid("{25405B2A-3AA5-4B48-B968-4AF6F342F348}");
      }
   }
   property String^ Name {
      String^ get() override
      {
         return "Name";
      }
   }
};

ref class My_Plugin : Plugin
{
public:
   My_Plugin(My_Factory ^ factory);
   ~My_Plugin() { }
public:
//здесь все срабатывает
   virtual void OnInitialize() override;
   virtual void OnCreateTools() override;
   virtual void OnCommand(Document^ document, int id) override;
   virtual void OnUpdateCommand(CommandUI^ cmdUI) override;
   virtual void OnExiting(System::ComponentModel::CancelEventArgs^ args) override;

//вот эти обработчики не срабатывают
   virtual void NewDocumentCreatedEventHandler(TFlex::DocumentEventArgs^ args) override;
   virtual void DocumentOpenEventHandler(TFlex::DocumentEventArgs^ args) override;
   virtual void ViewActivatedEventHandler(TFlex::ViewEventArgs^ args) override;
   virtual void ClosingDocumentEventHandler(TFlex::DocumentEventArgs^ args) override;
   virtual void ObjectDeletedEventHandler(TFlex::ObjectEventArgs^ args) override;
   virtual void PluginCommandEventHandler(TFlex::PluginCommandEventArgs^ args) override;
   virtual void ObjectCreatedEventHandler(TFlex::ObjectEventArgs^ args) override;
   virtual void ObjectChangedEventHandler(TFlex::ObjectEventArgs^ args) override;

private:
   Icon^ LoadIconResource(String^ name);

};
 
Игорь, потому что обработчики помечены модификатором protected public (см. вложение).

Вот рабочая схема для проекта C++/CLI:
plugin.h
Код
#pragma once

using namespace System;
using namespace TFlex;
using namespace TFlex::Model;

public ref class Factory : public PluginFactory
{
public:
    virtual Plugin^ CreateInstance() override;
    property Guid ID
    {
        Guid get() override
        {
            return Guid("{25405B2A-3AA5-4B48-B968-4AF6F342F348}");
        }
    }
    property String^ Name
    {
        String^ get() override
        {
            return "T-FLEX Plugin C++/CLI";
        }
    }
};

public ref class PluginInstance : Plugin
{
public:
    PluginInstance(Factory^ factory) : Plugin(factory) {}
protected public:
    virtual void DocumentOpenEventHandler(DocumentEventArgs^ args) override;
    virtual void ClosingDocumentEventHandler(TFlex::DocumentEventArgs^ args) override;
};

plugin.cpp
Код
#include "plugin.h"

Plugin ^ Factory::CreateInstance()
{
   return gcnew PluginInstance(this);
}

void PluginInstance::DocumentOpenEventHandler(DocumentEventArgs^ args)
{
   args->Document->AttachPlugin(this);
}

void PluginInstance::ClosingDocumentEventHandler(TFlex::DocumentEventArgs^ args)
{
   args->Document->DetachPlugin(this);
}
Изменено: vite - 02.12.2022 12:06:48
T-FLEX CAD 17.0.82.0
Страницы: 1