Надстройки и мастера
Сюда можно включить такие подробности, как контактные данные автора надстройки (для связи с пользователями), информацию о поддержке и лицензировании, а также информацию о версии и авторском праве и т. д.
Последняя страница мастера содержит сводку всех выбранных вами опций. После нажатия кнопки Finish мастер начнет создавать код для вашей надстройки (на основе всех сделанных вами в мастере настроек).
Поскольку надстройки — это dll-файлы, то мастер Add-in Wizard создаст исходный код надстройки (как часть проекта библиотеки классов в интегрированной среде). Этот первичный файл с кодом реализует класс Connect. Этот класс наследует от всех необходимых СОМ- интерфейсов (для того чтобы надстройка работала…
Первое, что необходимо отметить, — это то, что класс Connect наследует от двух разных интерфейсов: IDTCommandTarget и IDTExtensibility2.
public* class Connect : IDTExtensibility2, IDTCommandTarget
Интерфейс IDTCommandTarget обеспечивает функциональность, необходимую для предоставления надстройки через панель команд. Код для наследования от этого интерфейса был добавлен мастером (поскольку на странице 4 мастера надстроек был поставлен флажок Yes, create a tools menu item).
Интерфейс lDTExtensibility2'предоставляет надстройкам возможности работы с событиями. Он отвечает за все события, которые происходят в течение всего времени жизни надстройки.
При загрузке и выгрузке в хост-приложении надстройка проходит через целую череду событий. Каждое из этих событий представлено методом, определенным в интерфейсе !DTExtensibility2. Эти методы описаны в табл. 13.1.
Диаграммы на рис. 13.7 и рис. 13.8 показывают, как эти методы (которые представляют собой события) укладываются в процесс нормальной загрузки и выгрузки надстройки.
Если вы вернетесь назад к коду шаблона для надстройки, то увидите, что каждый из этих методов IDTExtensibility2 реализован. Методы OnDisconnection, OnAddlnsUpdate, OnStartupComplete и OnBeginShutdown пусты; мастер реализовал только их сигнатуру. Однако метод OnConnection уже имеет порядочное количество кода (и это еще до того, как вы приложили к нему руки).…
Метод OnDisconnection выполняется тогда, когда надстройка выгружается из Visual Studio. Это действие противоположно тому, о котором сообщает метод OnConnection. Так же, как и . для OnConnection, для этого метода предоставляется перечисление (ext DisconnectMode), которое указывает, как была инициирована выгрузка. Список возможных значений ext DisconnectMode см. в табл. 13.3.
Вот метод OnDisconnection:
III <summary>Реализует метод OnDisconnection интерфейса
III IDTExtensibility2. Получает уведомление, что дополнительный
/// модуль выгружается.</summary>
III <param term='disconnectMode'>Описывает, как дополнительный модуль III выгружается.</param>
III <param term='custom'>Массив параметров, специфичных для III хост-приложения.</param>
/// <seealso class='IDTExtensibility2' />
public void OnDisconnection(ext_DisconnectMode disconnectMode,
ref Array custom)
{
}
Если надстройка настроена на автоматическую загрузку во время запуска Visual Studio, то метод OnStartupComplete сработает после загрузки надстройки.
Вот метод OnStartupComplete:
II/ <зиттагу>Реализует метод OnStartupComplete интерфейса
III IDTExtensibility2. Получает уведомление, что хост-приложение
/// закончило загружаться.</summary>
III <param term='custom'>Массив параметров, специфичных для /// хост-приложения.</param>
/// <seealso class='IDTExtensibility2' /> public void OnStartupComplete(ref Array custom)
{
}
Надстройки могут реагировать на команды, выдаваемые внутри интегрированной среды. Если вы помните из обсуждения команд в главах 11 и 12, то это делается при помощи концепции "именованных команд". Именованная команда — это просто действие, которое имеет имя. Вы уже знаете, что Visual Studio имеет огромный список собственных команд, которые соответствуют широкому разнообразию действий, имеющихся в интегрированной среде. Используя коллекцию Commands/Commands2, вы можете создать собственные именованные команды (при помощи метода AddNamedCommand2).
Еще раз возвратимся к анализу метода OnConnection: мастер создал тело кода, отвечающего за создание новой именованной команды, добавление ее в меню Tools и для последующего реагирования на команду. Метод IDTCommandTarget…
Надстройками Visual Studio можно управлять при помощи менеджера Add-in Manager в Visual Studio. Он позволяет вам сделать две вещи: загрузить и выгрузить любую зарегистрированную надстройку и указать, как надстройку можно загружать. Для доступа к Add-in Manager (рис. 13.9) выберите меню Tools | Add-in Manager.
Рис. 13.9. Управление надстройками
Это диалоговое окно будет всегда выводить список всех имеющихся на локальном компьютере надстроек. Установка или снятие флажка рядом с названием надстройки приведет к немедленной загрузке или выгрузке надстройки. Флажок Startup определяет— будет ли данная надстройка загружаться автоматически при запуске Visual Studio. Флажок Command Line выполняет то же самое для случая, когда Visual…
Для программного управления надстройками используйте коллекцию DTE.Addins, которая содержит экземпляр Addin для каждой зарегистрированной надстройки (как загруженной, так и нет).
Вы можете напрямую ссылаться на надстройки (из коллекции DTE.Addins) по их имени следующим образом:
Addin addin = this.DTE.Addins.ItemC'MyFirstAddln");
Вы можете использовать свойства объекта надстройки для того, чтобы определить — загружена ли она, узнать ее имя, а также получить ProglD надстройки.
bool isLoaded = addin.Connected; string паше = addin.Name; string id = addin.ProglD;
Примечание
Мы используем термин "зарегистрированный" для обозначения надстройки, которая была инсталлирована на локальном компьютере и зарегистрирована в Visual Studio. В версиях до Visual Studio 2005 это означало, что…
Для начала процесса разработки вы создаете новое решение и проект типа Visual Studio Add-in с именем ColorSelectorAddln. Мастер Add-in Wizard создаст для вас код внутри класса Connect (точно так же, как это было сделано в начале данной главы). Класс Connect — это то место, где должен находиться весь код для интегрированной среды и код специфичный для объектной модели расширяемости.
Кроме основных инструкций надстройки вам понадобится также создать класс типа User Control, который инкапсулирует пользовательский интерфейс, а также логику обработки для надстройки.
Сначала вы можете заняться размещением пользовательского элемента управления там, где имеются все нужные вам функциональные возможности. После того как у вас появится рабочий элемент управления, вы можете начать подключать его к Visual Studio при помощи класса Connect (созданного мастером Add-in Wizard).
Рис. 13.10. Пользовательский элемент управления PaletteControl
Добавьте пользовательский элемент управления PaletteControl в проект надстройки (при помощи выбора Project | Add User Control). После добавления элемента управления вы должны поместить девять элементов управления на поверхность конструирования пользовательского элемента управления. Во-первых, добавьте поле изображения; оно будет использоваться для показа цветовой палитры, хранимой как простое растровое изображение в файле ресурса (в данном…