Jako, że w tej chwili jestem trochę uziemiony odnośnie pisania kolejnych wpisów o TPL (ale spokojnie powrócę do nich) postanowiłem napisać o czymś innym. Ale po kolei…

Wszystko zaczęło się od pytania na portalu devpytania.pl. Zacząłem się zastanawiać czy rzeczywiście nie ma jakiejś metody na to. Fullscreen’a, aż tak często nie używam, ale czasem się zdarza i rzeczywiście zachowanie to jest denerwujące. Tak więc postanowiłem coś z tym zrobić i napisać małego AddIn’a do VS, który będzie za to odpowiedzialny.

Zatem do działa.

Nie będę się rozpisywał co trzeba kliknąć w VS, aby stworzyć projekt AddIn’a bo z tym nawet najbardziej początkujący sobie poradzą. Zaczynamy zatem od momentu jak już nasze pliki zostaną utworzone. To co musimy zrobić to dowiedzieć się kiedy aplikacja jest w trybie Debug a kiedy nie, czy jesteśmy uruchomieni w trybie pełnoekranowym oraz to jak się przełączać w pomiędzy normalnym oknem a tym trybem.

Tryb pracy

Musimy rozeznać się w jakim trybie pracy aktualnie się znajdujemy a konkretniej musimy być powiadamiani przy zmianie tego trybu z Debugowania na Normalny. Na szczęście API pluginów dostarcza nam eventy. Jednym z nich jest ModeChanged. Jak się do nich podpiąć?

  _events = _applicationObject.Events.DTEEvents;
_events.ModeChanged += DTEEvents_ModeChanged;

Od razu uwaga. Uzywać należy naszej zmiennej w klasie przy podłączaniu się do eventów. Taki kod jak poniżej nie zadziałą prawidłowo
(ale nie będzie też rzycać wyjątków. Będzie wyglądało tak jakby eventy nie przychodziły).

_applicationObject.Events.DTEEvents.ModeChanged += DTEEvents_ModeChanged; // Nie zadziała!!!

Po podłączeniu się do eventów będziemy otrzymywać powiadomienia o zmianie wraz z parametrem LastState (będącym enumeracją vsIDEMode). Zatem możemy już działać.

Komunikaty na zewnątrz

Krótka przerwa przed kontynuacją. Choć AddIn’y możemy spokojnie debugować to czasem warto mieć możliwość wypisania czegoś na ekran. Tu przychodzi z pomocą konsola OutputWindow. Możemy dodawać do niej nasze “zakładki” i na nich pisać. Jak to zrobić pokazuje kod poniżej:

Windows w = _applicationObject.Windows;            
Window ww = w.Item(Constants.vsWindowKindOutput);
OutputWindow outputWindow = (OutputWindow)ww.Object;
outputPane = outputWindow.OutputWindowPanes.Add("Octal Solutions - Fullscreen & Debug");

Ostatnia instrukcja daje nam obiekt, na którym możemy wywołać metodę OutputString i nasz tekst ukaże się na naszej zakładce w oknie Output.
Uzbrojeni w taką wiedzę możemy przejść dalej.

Tryb pełnoekranowy

Z tym jest najwięcej problemów, bo nie udało się znaleźć właściwości czy metody zawracającej tę wartość. Trzeba sprawdzić rozmiar głównego okna VS:

private bool IsFullScreen()
{
System.Drawing.Rectangle screen = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
var mainWindow = _applicationObject.DTE.MainWindow;
return mainWindow.Width == screen.Width && mainWindow.Height == screen.Height;
}

Zmiana trybu pracy

Chyba najprostsza z tych rzeczy. Wystarczy wykonać polecenie View.Fullscreen. Visual Studio przełącza się pomiędzy pełnym ekranem a normalnym oknem.

_applicationObject.ExecuteCommand("View.Fullscreen", "");

W zasadzie to już wszystko co musimy zrobić aby nasz AddIn zadziałał. Warto pamiętać jeszcze o odłączeniu się od zdarzeń, gdy zostaje on wyładowane z pamięci tak by zostawić po sobie porządek.

Pełny plugin można ściągnąć używając poniższego linka: Fullscreen & Debug. Jeśli masz jakieś komentarze, uwagi napisz do mnie lub zostaw komentarz pod postem.