1.20.2008

Visual Studio-AddIn Tricks: Custom ToolWindow Tab Picture VS2005 / VS2008

Mit dem Automatisierungs-Objektmodell von Visual Studio,
ist es auf relativ einfache Weise möglich, benutzerdefinierte (custom) ToolWindows vom Typ EnvDTE.Window / EnvDTE80.Window2 zu erstellen. Außerdem kann für ein solches benutzerdefiniertes (custom) ToolWindow ein benutzerdefiniertes (custom) Tab Picture angegeben werden. Die Methode EnvDTE80.Window2.SetTabPicture erwartet ein IPictureDisp-COM-Type, ein Bitmap-Handle oder einen Pfad zu einer Bitmapdatei. In Visual Studio 2005 funktionieren alle drei Möglichkeiten wunderbar. Leider ist das unter Visual Studio 2008 nicht mehr so. Beonders der Versuch mit einem Bitmap-Handle (Image.GetHbitmap()) war in Visual Studio sehr einfach, doch lässt diese Variante Visual Studio 2008 ziemlich kalt. Den Weg über einen Pfad zu einem Bitmap, scheint Visual Studio 2008 auch nicht wirklich zu interessieren. Bleibt also nur der Weg über ein IPictureDisp-COM-Typ. Wenn man keine Erfahrung mit alten COM-Typen, den guten alten C /C++ Zeiten hat, dann wird man sich sicher die Frage stellen wie man nun an so ein IPictureDisp-COM-Typ kommt. Hier hilft ganz unvoreingenommen die VB-Welt. Legen Sie sich in Ihrem Projekt eine Referenz auf die DLL "Microsoft.VisualBasic.Compatibility.dll" an, die Sie in der Registerkarte .NET des Referenz-Dialoges von Visual Studio finden. In dieser DLL finden Sie eine Klasse mit dem Namen "Support" und in dieser Klasse die statische (static) Methode "ImageToIPicture(...)". Diese Methode erwartet ein Image-Object, das dann zum Beispiel aus Ihren Assembly-Ressourcen kommen kann. Hier ein Beispiel-Code in C# zum ermitteln des korrekten IPictureDisp Objects, entsprechend der Visual Studio Version:

private void InitializeCustomToolWindow()
{
//.. initialize custom ToolWindow-code

Image customToolWindowTabImage = GetCustoToolWindowTabImag(EnvDTE80.DTE2.Version);

EnvDTE80.Window2.SetTabPicture(Support.ImageToIPicture(customToolWindowTabImage));
}

private Image GetCustoToolWindowTabImage(string visualStudioVersion)
{
Image returnValue = null;

if (visualStudioVersion.Equals("8.0"))
returnValue = Properties.Resources.VS2005CustomToolWindowI;

else if (visualStudioVersion.Equals("9.0"))
{
returnValue = Properties.Resources.VS2008CustomToolWindowI;
}

return returnValue;
}

Hier noch die Farb-Codes für den jeweiligen Transparenzwert, den die unterschiedlichen Visual Studio Versionen erwarten:

VS2005 = RGB 254,0,254
VS2008 = RGB 0,254,0

(Ironie: Toll das die Transparenzwerte von MS immer wieder geändert werden!)

HTH
TOM_MUE

Labels: , ,

0 Kommentare:

Kommentar veröffentlichen

Links zu diesem Post:

Link erstellen

<< Startseite