Завершение мастера

Оценить
(0 голоса)

Сюда можно включить такие подробности, как контактные данные автора надстройки (для связи с пользователями), информацию о поддержке и лицензировании, а также информацию о версии и авторском праве и т. д.

Последняя страница мастера содержит сводку всех выбранных вами опций. После нажатия кнопки Finish мастер начнет создавать код для вашей надстройки (на основе всех сделанных вами в мастере настроек).

Поскольку надстройки — это dll-файлы, то мастер Add-in Wizard создаст исходный код над­стройки (как часть проекта библиотеки классов в интегрированной среде). Этот первичный файл с кодом реализует класс Connect. Этот класс наследует от всех необходимых СОМ- интерфейсов (для того чтобы надстройка работала в контексте интегрированной среды раз­работки).

В листинге 13.1 показан класс Connect (таким, каким он был сгенерирован мастером Add-in Wizard).

using System; using Extensibility; using EnvDTE; using EnvDTE80;

using Microsoft.VisualStudio.CommandBars; using System.Resources; using System.Reflection; using System.Globalization;

*

namespace MyAddinl {

III <summary>06beKT для реализации надстройки.</summary>

III <seealso class=*IDTExtensibility21 />

public class Connect : IDTExtensibility2, IDTCommandTarget {

III <зиштагу>Реализует конструктор для объекта надстройки.

Ill Разместите ваш код инициализации в этом методе.</summaгу> public Connect()

{

}

III <summaгу>Реализует метод OnConnection интерфейса III IDTExtensibility2. Получает уведомление, что III надстройка загружается.</summary>

III <param term='application'Жорневой объект III хост-приложения.</рагаш>

III <param term='connectMode'>Описывет, как загружается III надстройка.</param>

III <рагаш term='addlnlnst'>Объект, представляющий эту III надстройку.</param>

III <seealso class='IDTExtensibility21 /> public void OnConnection(object application,

ext_ConnectMode connectMode, object addlnlnst, ref Array custom)

{

_applicationObject = (DTE2)application;

_addlnlnstance = (Addin)addlnlnst; if(connectMode == ext_ConnectMode.ext_cm_UISetup)

{

object []contextGUIDS = new object[] { }; .

Commands2 commands = (Commands2)_applicationObject.Commands; string toolsMenuName; try {

// Если вы хотите перенести команду в другое меню, то нужно // изменить слово "Tools" на английское название меню. Этот код // принимает культуру, прибавляет имя меню, а затем добавляет // команду в меню. Вы можете найти список всех меню // верхнего уровня в файле CommandBar.resx. string resourceName;

ResourceManager resourceManager =

new ResourceManager("MyAddinl.CommandBar",

Assembly.GetExecutingAssembly());

Culturelnfo culturelnfo =

new Culturelnfo(_applicationObject.LocalelD);

if(culturelnfo.TwoLetterlSOLanguageName == "zh")

{

System.Globalization.Culturelnfo parentCulturelnfo = culturelnfo.Parent; resourceName = String.Concat(parentCulturelnfo.Name, "Tools");

}

else

{

resourceName =

Гпава 13. Надстройки и мастера  

String.Concat(culturelnfo.TwoLetterlSOLanguageName, "Tools")

}

toolsMenuName = resourceManager.GetString(resourceName);

}

catch

{

//Мы пытались найти локализованную версию слова Tools,

// но не нашли. По умолчанию принимается слово en-US,

// которое возможно будет работать и для текущей культуры. toolsMenuName = "Tool^";

}

// Поместить команду в меню Tools.

// Найти панель команд MenuBar, которая является панелью команд // верхнего уровня, содержащей все элементы главного меню: Microsoft.VisualStudio.CommandBars.CommandBar menuBarCommandBar =

((Microsoft.VisualStudio.CommandBars.CommandBars)

_applicationObject.CommandBars)["MenuBar"];

// Найти панель команд Tools в панели команд MenuBar CommandBarControl toolsControl =

menuBarCommandBar.Controls[toolsMenuName];

CommandBarPopup toolsPopup = (CommandBarPopup)toolsControl;

// Этот блок try/catch block можно дублировать, если вы хотите // добавить несколько команд для обработки вашей надстройкой // Убедитесь только, что вы также обновили метод // QueryStatus/Exec и включили в него имена новых команд, try {

// Добавить команду в коллекцию Commands:

Command command =

commands. AddNamedCommand2 (_addlnlnstance,

"MyAddinl", "MyAddinl",

"Executes the command for MyAddinl", true, 59, ref contextGUIDS,

(int)vsCommandStatus.vsCommandStatusSupported+

(int)vsCommandstatus.vsCommandStatusEnabled,

(int)vsCommandStyle.vsCommandStylePictAndText, vsCommandControlType.vsCommandControlTypeButton);

II   Добавить элемент управления для команды в меню Tools: if((command != null) && (toolsPopup != null))

{

command.AddControl(toolsPopup.CommandBar, 1);

}

}

catch (System. ArgumentException)

{

// Если мы оказались здесь/ то исключение, вероятно, произошло // из-за того, что команда с этим именем уже существует. Если // это так, то нет необходимости повторно создавать команду, и

%

11   мы можем спокойно игнорировать исключение.

}

}

}

III <summary>Реализует метод OnDisconnection интерфейса

III IDTExtensibility2. Получает уведомление, что дополнительный

III модуль выгружается.</summary>

III <param term='disconnectMode'>Описывает, как дополнительный модуль III выгружается.</param>

III <param term='custom'>Maссив параметров, специфичных для III хост-приложения.</param>

III <seealso class='IDTExtensibility2' />

public void OnDisconnection(ext_DisconnectMode disconnectMode,

ref Array custom)

{

}

III <зиттагу>Реализует метод OnAddlnsUpdate интерфейса III IDTExtensibility2. Получает уведомление, когда коллекция III надстроек изменяется.</summary>

III <param term='custom'>Массив параметров, специфичных для III хост-приложения.</param>

III <seealso class='IDTExtensibility2'* /> public void OnAddlnsUpdate(ref Array custom)

•    {

}

III <зиттагу>Реализует метод OnStartupComplete интерфейса

III IDTExtensibility2. Получает уведомление, что хост-приложение

/N закончило загружаться.</summary>

/// <param term='custom'>Массив параметров, специфичных для III хост-приложения.</param>

III <seealso class='IDTExtensibility2' /> public void OnStartupComplete(ref Array custom)

{

}

III <summary>Реализует метод OnBeginShutdown интерфейса III IDTExtensibility2. Получает уведомление, что III хост-приложение выгружается.</summary>

III <param term='custom'>Массив параметров, специфичных для III хост-приложения.</param>

III <seealso class='IDTExtensibility2'/> public void OnBeginShutdown(ref Array custom)

{

}

III <зиттагу>Реализует метод QueryStatus интерфейса

III IDTCommandTarget. Он вызывается тогда, когда информация о

III доступности команды о6новляется</зиттагу>

\

III <param term=' commandName' >Имя команды, для которой надо III определить состояние.</param>

III <param term='neededText'ХГекст, который необходим III для команды. </param>

III <param term='status'>Состояние команды III в пользовательском интерфейсе.</param>

III <param term='commandText'>Текст, требуемый III параметром neededText .</param>

/// <seealso class='Exec' />

public void QueryStatus(string commandName,

vsCommandStatusTextWanted neededText, ref vsCommandstatus status, ref object commandText)

{

if(neededText ==

vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)

{

if(commandName == "MyAddinl.Connect.MyAddinl")

{

status =

(vsCommandStatus)vsCommandstatus.vsCommandstatusSupported

IvsCommandStatus.vsCommandStatusEnabled; return;

}

}

} '

III <зиттагу>Реализует метод Exec интерфейса III IDTCommandTarget. Он вызывается тогда, когда III команда вызывается.</summary>

III <param term=' commandName' >Имя команды, которую III необходимо выполнить.</param>

III <param term='executeOption'>Описывает, как команда III должна выполняться.</param>

III <param term='varln'>Параметры, передаваемые вызывающей III стороной обработчику команды.</param>

III <param term='varOut'> Параметры, передаваемые обработчиком III команды вызывающей стороне.</param>

III <param term=1 handled'>Информирует вызывающую сторону о том,.

Ill была ли команда обработана.</param>

III <seealso class='Exec' /> public void Exec(string commandName,

vsCommandExecOption executeOption, ref object varln, ref object varOut, ref bool handled)

{

handled = false;

if (executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault) {

if (commandName == "MyAddinl. Connect .MyAddinl")

{

handled = true; return;

}

}

}

private DTE2 _applicationObject; private Addin addlnlnstance;

На данном этапе надстройка реально ничего не делает. Вам еще нужно реализовать ее логи­ку. Однако мастер уже реализовал большую часть (если не все) необходимых внутренно­стей, требующихся для:

□    связывания надстройки с интегрированной средой;

□    предоставления ее через меню Tools;

□    перехвата соответствующих событий для того, чтобы надстройка заработала.

Теперь, когда у вас есть основа кода для дальнейшей работы, вы должны быть готовы изу­чить исходный код для того, чтобы понять общую структуру и компоновку надстройки.

Подробнее в этой категории: Структура надстройки »
Структура надстройки
Жизненный цикл надстройки
On Disconnection
OnStartupComplete
Реакция на команды

Добавить комментарий


Защитный код
Обновить

© 2017 www.visualstudios.ru. Все права защищены.