Я играю с созданием команды редактирования текста Visual Studio. Я добрался до создания пакета, связав команду, поместив ее в меню. Но то, что я не могу сделать по рекомендованному Microsoft, - это выяснить, есть ли активное текстовое представление, к которому должна применяться команда.IVsTextManager :: GetActiveView (true, null, ...) возвращает нефокусированный вид
Я делаю следующие шаги в the VSSDK tutorial (прокрутите вниз до Используя команду меню, чтобы добавить комментарий Украшение). Выбрав команду из меню, mt command handler вызывается все правильно. однако, когда выполняется следующий точный код учебника, результаты, которые я получаю, непоследовательны.
IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
IVsTextView vTextView = null;
int mustHaveFocus = 1;
txtMgr.GetActiveView(mustHaveFocus, null, out vTextView);
Теперь, если есть только текстовые виды, все работает так, как вы ожидали: возвращается активный текстовый вид. Но нарисовать другое изображение на картинке (я использую редактор Bitmap), и вид, возвращаемый GetActiveView
, выглядит как последний активный текстовый вид. I. e., Если я переключаю вкладки, чтобы отобразить растровое изображение по ранее активному виду до fileA, тот же вид для fileA. Другими словами, я не могу понять, сосредоточено ли текстовое представление или нет.
Теперь это кажется несовместимым с (как бы бедным) documentation от IVsTextManager::GetActiveView()
. Он должен сказать о первом аргументе функции: , если true, тогда возвращается текущий активный пользовательский интерфейс. Я правильно читаю это? Поведение, которое я наблюдаю, похоже, соответствует другому случаю: , если false, тогда возвращается последний активный вид, независимо от того, активен ли этот вид в настоящее время.
Я могу определить другой способ привязки команд к представлениям, а именно путем подключения к созданию представления. Меня беспокоит то, что я, по-видимому, не могу обработать команду в рекомендованном Microsoft.
Спасибо, это было то, что я закончил делать. – kkm