Есть событие, вызванное, когда dte.Solution.SolutionBuild.StartupProjects изменяется? - PullRequest
5 голосов
/ 24 ноября 2010

Я создаю надстройку Visual Studio 2010 для внутреннего использования в моей компании.Я хотел бы настроить заголовок главного окна для отображения названия текущего запускаемого проекта.Я могу установить заголовок главного окна следующим кодом:

            DTE d = GlobalClass.dte2 as DTE;
        IntPtr hWnd = new System.IntPtr(d.MainWindow.HWnd);


        if (d.Solution.SolutionBuild.StartupProjects != null)
        {
            object[] sStartUpProject = (object[])d.Solution.SolutionBuild.StartupProjects;

            string Caption = d.MainWindow.Caption + "Current Project: " + (string)sStartUpProject[0];

            SendMessage(hWnd, WM_SETTEXT, new IntPtr(0), Caption);
        }

Я могу запустить этот код всякий раз, когда окно создается или активируется, но это не обновляет заголовок, если пользователь изменяет проект запускав обозревателе решений (или моей надстройки) и не перемещается в другое окно в Visual Studio.Я хочу обновить подпись после внесения изменений.

1 Ответ

1 голос
/ 30 ноября 2012

Да, вам нужно подписаться на IVsMonitorSelection события и обрабатывать SEID_StartupProject в OnElementValueChanged().

Проверьте этот код, это само за себя:

https://bitbucket.org/thirteen/switchstartupproject/src/a80f0deb737c/SwitchStartupProject/SwitchStartupProjectPackage.cs

...