HOWTO: Crear imágenes personalizadas para comandos de complementos, botones y toolwindows de Visual Studio .NET.

Id. de artículo: 555417 - Ver los productos a los que se aplica este artículo
Autor: Carlos Quintero MVP
Expandir todo | Contraer todo

Resumen

En este artículo se describe cómo crear imágenes personalizadas para comandos de complementos, botones y toolwindows .NET.

Síntomas

En este artículo se describe cómo crear imágenes personalizadas para comandos de complementos, botones y toolwindows .NET.

Más información

Hay al menos tres casos en los que deberá crear imágenes personalizadas, transparentes para sus funciones de complemento de Visual Studio . NET. Este Este artículo explica cómo hacerlo en cada caso:
 
(A) Personalizado se imagina para comandos de complementos
 
Al llamar a la función Commands.AddNamedCommand para crear un comando si transmite el valor Falso en el parámetro MSOButton (el 5th), a continuación, el comando utilizará una imagen personalizada en lugar de una imagen tomada de Microsoft Office. La imagen personalizada se especifica mediante el parámetro Bitmap (el sexto) que es un entero e indica el identificador de recurso del mapa de bits en un DLL satélite de deber crear utilizando Visual C++ (VS 2005 admite satélite administrado DLL pero para Visual Studio .NET 2002/2003, necesita utilizar un proyecto C++ para Win32).
 
Los pasos son los siguientes:
 
- Agregue un proyecto nuevo a su solución que selecciona proyectos de Visual C++, proyecto Win32, y dé un nombre tal como <MyAddinName UI.vcproj (casetas de interfaz de usuario para interfaz de usuario)> a ello.
 
- En el asistente mostrado, seleccione Configuración de la aplicación, seleccione el radiobutton DLL y haga clic en el botón Finalizar. El proyecto nuevo se agrega a la solución.
 
- Haga clic con el botón secundario en el nodo de carpeta Recursos de este proyecto nuevo y seleccione la opción para que "Agregue" "Agregar Resourceà". Un archivo denominado archivo ".rc <MyAddinName>" se agrega al nodo y un cuadro de diálogo "Agregar recurso" aparece. Seleccione Bitmap en la lista y haga clic en el botón "Nuevo".
 
- Cambie las dimensiones del mapa de bits que utiliza la ventana Propiedades y que establece las propiedades Height y Width como 16.
 
- Cambie (por ejemplo) el identificador del mapa de bits en la ventana Propiedades al valor 1.
 
- Dibuje o pegue una imagen para su mapa de bits.
 
Utilizar transparencia necesaria para usar un color especial : selecciona el color de color verde verde en el toolwindow Colores, hace clic en la "Imagen" en menú "Ajustar Colorsà" y del diálogo mostrado, escribe los valores rojos = 0 Green = 254 (no 255) Y Azul = 0. Puede utilizar este color ahora para rellenar las áreas transparentes.
 
- Una vez que haya finalizado su mapa de bits, necesita cambiar la llamada a la función Commands.AddNamedCommand : transmite el valor Falso en el parámetro MSOButton (el 5th) y transmite el identificador del mapa de bits (1 en nuestro ejemplo) en el parámetro Bitmap (el sexto).
 
- Genere el DLL y póngalo en una subcarpeta de su carpeta de complemento que nombra la subcarpeta a la configuración regional de Visual Studio. Para la versión en inglés, la configuración regional es 1033.
 
Sólo debe informar Visual Studio .NET - en momento de que su complemento utiliza un DLL satélite. En la entrada de Registro, HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.0\Addins\<MyAddinName>.Connect (uso 7,0 para VS.NET 2002 y 7,1 para VS.NET 2003) agrega dos valores alfanuméricos:
 
"SatelliteDLLName"" El nombre de su DLL satélite tal como <MyAddinName UI.dll>
"SatelliteDLLPath" : la ruta su dll satélite que excluye la configuración regional (de modo que es realmente la ruta al complemento, no al satélite DLL).
 
Después de todo esto, se creará sus comandos con una imagen personalizada, transparente. Si debe restablecer sus comandos de forma que se los vuelve a crear, puede abrir un Símbolo del sistema de Visual Studio .NET y escribir /setup devenv.exe.
 
(B) Personalizado se imagina para botones de complementos sin un comando
 
En el caso anterior, nosotros hemos visto cómo crear un comando con una imagen personalizada. Para crear botones, también CommandBarButtons creado en este comando (que utiliza el método Command.AddControl) mostrará aquella imagen personalizada otro usted a veces se necesita poder tener un comando detrás en su lugar, al utilizar el método CommandBar.Controls.Add. Para que establezca un personalizado transparente, en este caso, a imagen para el CommandBarControl creado, lo debe convertir en CommandBarButton y a continuación, se deben establecer sus propiedades Picture y Mask (en este orden):
 
- La propiedad Picture se utiliza para especificar un objeto Stdole.IPictureDisp (una imagen COM no administrada) con su mapa.
- La propiedad Mask se utiliza para especificar un objeto Stdole.IPictureDisp con un mapa (no un mapa 2-color de bits) de 16 color que utiliza el color blanco que establece las áreas transparentes de la imagen y el color negro que establece las áreas non-transparent.
 
Puede obtener un objeto Stdole.IPictureDisp de un objeto administrado System.Drawing.Image con esta clase:
 
ImageToPictureDispConverter Public Class
   Hereda System.Windows.Forms.AxHost
   
   New() Public Sub
      MyBase.new("{63109182-966B-4e3c-A8B2-8BC4A88D221C}")
   End Sub
   
   Función pública GetIPictureDispFromImage(ByVal objImage as System.Drawing.Image) como Stdole.IPictureDisp
   
      ObjPicture atenuado como Stdole.IPictureDisp
   
      ( objPicture stdole.IPictureDisp ) = CType(MyBase.GetIPictureDispFromPicture(objImage)
 
      Devuelva objPicture
    
   End Function
 
End Class

Utiliza esta clase como se explica a continuación:
 
ObjImageToPictureDispConverter atenuado como ImageToPictureDispConverter
Atenúe objImage System.Drawing.Image Como
ObjIPictureDisp atenuado como Stdole.IPictureDisp
 
objImage = (obtiene la imagen administrada de lugar)
objImageToPictureDispConverter = ImageToPictureDispConverter() nuevo
objIPictureDisp=objImageToPictureDispConverter.GetIPictureDispFromImage(objImage)
objImageToPictureDispConverter.Dispose()

Otro ways de crear un Stdole.IPictureDisp en lugar de utilizar una imagen administrada utiliza un archivo en disco o un recurso de mapa de bits de un DLL satélite. En el primer caso, utilizará esta función exportada por oleaut32.dll:
 
_ <DllImport("oleaut32.dll", =CharSet.Unicode, =True, ="OleLoadPictureFile")>
Sub compartido público OleLoadPictureFile(ByVal varFileName as object, )
  (LpIPictureDisp As Object <MarshalAs(UnmanagedType.IDispatch) ByRef>)
End Sub
 
Como puede ver, la función recibe un nombre de archivo como primer parámetro y devuelve un IPictureDisp en el segundo parámetro.
 
En el caso posterior, puede obtener un identificador de mapa de bits desde un recurso que controla DLL utilizando esta función:
 
_ <DllImport("user32.dll", ="LoadBitmapA")>
Función compartida pública LoadBitmap(ByVal hDLLInstance as IntPtr, ByVal iBitmapIndex as integer) como entero
End Function

Y utilizará a continuación la función OleCreatePictureIndirect para obtener un objeto IPictureDisp del identificador de mapa de bits:
 
Estructura pública PICTDESC
   SizeOfStruct de Friend como entero
   PicType de Friend como entero
   Hbitmap Friend como IntPtr
   Hpal Friend como IntPtr
   De Friend relleno de Friend como entero
   Friend Sub New (hbmp ByVal, IntPtr Como)
      Me.SizeOfStruct = Marshal.SizeOf(me.GetType)
      Me.PicType = 1
      Me.hbitmap = hbmp
      Me.hpal = IntPtr.zero
      Me.padding = 0
   End Sub
End Structure
 
_ <DllImport("olepro32.dll", ="OleCreatePictureIndirect")>
Función compartida pública OleCreatePictureIndirect(ByRef pPictDesc as PICTDESC, ByRef riid as guid, )
   As Integer (fOwn ByVal como entero, ppvObj As Object <MarshalAs(UnmanagedType.IDispatch) ByRef>,)
End Function

Aquella función se utiliza de forma siguiente:
 
Función pública GetIPictureDispFromBitmapHandle(ByVal hBitmapHandle as IntPtr) como Stdole.IPictureDisp
 
   ObjPicture atenuado como objeto
   ObjGuid atenuado como guid("00020400-0000-0000-C000-000000000046") nuevo
   IResult atenuado como entero
   TPICTDESC atenuado como PICTDESC(hBitmapHandle) nuevo
 
   iResult = OleCreatePictureIndirect (tPICTDESC, objGuid, 1 objPicture,)
 
   Devuelva CType(objPicture, Stdole.IPictureDisp)
 
End Function

 
Imágenes (C) personalizadas para toolwindows
 
Cuando crea un toolwindow que utiliza el método Windows.CreateToolWindow y se vincula la ventana junto con otro toolwindows, su ficha muestra una imagen. De forma predeterminada, si no ha especificado una imagen, se muestra un logotipo de imagen de Visual Studio. Puede especificar una imagen personalizada que utiliza el método Window.SetTabPicture que recibe un objeto StdOle.IPictureDisp de poder obtener con cualquiera de método explicado arriba de un objeto. Debe llamar al método SetTabPicture antes de hacer visible la ventana de llamar a Window.Visible = True. Las áreas transparentes de la imagen deben utilizar el valor 0, 254, 0, de RGB tal y como se explicó antes.

Propiedades

Id. de artículo: 555417 - Última revisión: miércoles, 17 de agosto de 2005 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Visual Studio .NET 2002 Enterprise Developer
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2003 Enterprise Architect
  • Microsoft Visual Studio .NET 2003 Enterprise Developer
  • Microsoft Visual Studio .NET 2003 Professional Edition
Palabras clave: 
kbpubmvp kbpubtypecca kbhowto KB555417 KbMtes kbmt
Traducción automática
AVISO: Gracias por utilizar el servicio de Traducción Automática. Este artículo ha sido traducido por un sistema informático sin ayuda humana (Machine Translation). Microsoft ofrece estos artículos a los usuarios que no comprendan el inglés, exclusivamente, con el fin de que puedan entenderlos más fácilmente. Microsoft no se hace responsable de la calidad lingüística de las traducciones ni de la calidad técnica de los contenidos de los artículos así como tampoco de cualesquiera problemas, directos o indirectos, que pudieran surgir como consecuencia de su utilización por los lectores.
Haga clic aquí para ver el artículo original (en inglés): 555417
RENUNCIA LEGAL DE COMMUNITY SOLUTIONS
NI MICROSOFT IBÉRICA S.R.L. ("MICROSOFT") NI SUS RESPECTIVOS PROVEEDORES GARANTIZAN LA IDONEIDAD, FIABILIDAD NI EXACTITUD DE LA INFORMACIÓN Y LOS GRÁFICOS INCLUIDOS. TODA LA INFORMACIÓN Y LOS GRÁFICOS RELACIONADOS SE PROPORCIONAN "TAL CUAL" SIN GARANTÍA DE NINGUNA CLASE. SIN PERJUICIO DE NINGUNA GARANTÍA IMPUESTA POR CUALQUIER LEY DE APLICACIÓN OBLIGADA, MICROSOFT Y/O SUS RESPECTIVOS PROVEEDORES RENUNCIAN POR LA PRESENTE A TODA GARANTÍA Y CONDICIÓN RESPECTO A ESTA INFORMACIÓN Y LOS GRÁFICOS RELACIONADOS, INCLUIDA CUALQUIER GARANTÍA Y CONDICIÓN IMPLÍCITA DE COMERCIABILIDAD, IDONEIDAD PARA UN DETERMINADO FIN, ESFUERZO RAZONABLE, TITULARIDAD Y AUSENCIA DE INFRACCIÓN. USTED ADMITE EXPRESAMENTE QUE, SIN PERJUICIO DE LOS CASOS EN LOS CUALES LA LEY VIGENTE PROHÍBA LA EXCLUSIÓN DE RESPONSABILIDAD POR DAÑOS, BAJO NINGÚN CONCEPTO, NI MICROSOFT NI SUS PROVEEDORES ACEPTARÁN RESPONSABILIDAD ALGUNA POR DAÑOS DIRECTOS O INDIRECTOS DE CUALQUIER ÍNDOLE U ORIGEN (INCLUYENDO, ENTRE OTROS, LOS DAÑOS POR PÉRDIDA DE USO, INFORMACIÓN O BENEFICIOS) QUE SE DERIVEN O ESTÉN RELACIONADOS CON EL USO O INCAPACIDAD DE USO DE LA INFORMACIÓN Y LOS GRÁFICOS RELACIONADOS INCLUIDOS.

Enviar comentarios