Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Actualización: noviembre 2007
Se aplica a |
|---|
La información de este tema sólo se aplica a los proyectos y versiones especificados de Visual Studio Tools para Office de Microsoft Office. Tipo de proyecto
Versión de Microsoft Office
Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto. |
En este ejemplo se agrega un icono a un botón de barra de comandos de un menú personalizado de Microsoft Office Outlook. El icono se incluye en los recursos del proyecto. Para obtener más información sobre los recursos de proyectos, vea Agregar y editar recursos (Visual C#) y Cómo: Agregar o quitar recursos.
Para agregar iconos personalizados
Agregue código al archivo ThisAddIn.vb o ThisAddIn.cs del proyecto de Outlook para crear controles CommandBarPopup y CommandBarButton, que representan el menú personalizado y el comando de menú. Este código comprueba si el menú existe. Si existe, el código quita el menú. A continuación, agrega el nuevo menú.
Private MenuBar As Office.CommandBar Private newMenuBar As Office.CommandBarPopup Private ButtonOne As Office.CommandBarButton Private menuTag As String = "AUniqueName" Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup RemoveMenubar() AddMenuBar() End Sub Private Sub AddMenuBar() Try MenuBar = Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar newMenuBar = menuBar.Controls.Add( _ Office.MsoControlType.msoControlPopup, _ Temporary:=False) If newMenuBar IsNot Nothing Then newMenuBar.Caption = "See New Icon" newMenuBar.Tag = menuTag buttonOne = newMenuBar.Controls.Add( _ Office.MsoControlType.msoControlButton, _ Before:=1, Temporary:=False) With buttonOne .Style = Office.MsoButtonStyle _ .msoButtonIconAndCaption .Caption = "New Icon" .FaceId = 65 .Tag = "c123" .Picture = getImage() End With newMenuBar.Visible = True End If Catch Ex As Exception MessageBox.Show(Ex.Message) End Try End Sub Private Sub RemoveMenubar() Try ' If the menu already exists, remove it. Dim foundMenu As Office.CommandBarPopup = _ Me.Application.ActiveExplorer().CommandBars.ActiveMenuBar. _ FindControl(Office.MsoControlType.msoControlPopup, _ System.Type.Missing, menuTag, True, True) If foundMenu IsNot Nothing Then foundMenu.Delete(True) End If Catch Ex As Exception MessageBox.Show(Ex.Message) End Try End Subprivate Office.CommandBar menuBar; private Office.CommandBarPopup newMenuBar; private Office.CommandBarButton buttonOne; private string menuTag = "AUniqueTag"; private void ThisAddIn_Startup(object sender, System.EventArgs e) { RemoveMenubar(); AddMenuBar(); } private void AddMenuBar() { try { menuBar = this.Application.ActiveExplorer().CommandBars.ActiveMenuBar; newMenuBar = (Office.CommandBarPopup)menuBar.Controls.Add( Office.MsoControlType.msoControlPopup, missing, missing, missing, false); if (newMenuBar != null) { newMenuBar.Caption = "See New Icon"; newMenuBar.Tag = menuTag; buttonOne = (Office.CommandBarButton) newMenuBar.Controls. Add(Office.MsoControlType.msoControlButton, System. Type.Missing, System.Type.Missing, 1, true); buttonOne.Style = Office.MsoButtonStyle. msoButtonIconAndCaption; buttonOne.Caption = "New Icon"; buttonOne.FaceId = 65; buttonOne.Tag = "c123"; buttonOne.Picture = getImage(); newMenuBar.Visible = true; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void RemoveMenubar() { // If the menu already exists, remove it. try { Office.CommandBarPopup foundMenu = (Office.CommandBarPopup) this.Application.ActiveExplorer().CommandBars.ActiveMenuBar. FindControl(Office.MsoControlType.msoControlPopup, System.Type.Missing, menuTag, true, true); if (foundMenu != null) { foundMenu.Delete(true); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }Cree una clase nueva denominada ConvertImage. Esta clase utiliza System.Forms.Axhost para convertir un archivo Image en un tipo de imagen que se puede aplicar al elemento de menú.
<Microsoft.VisualStudio.Tools.Applications.Runtime.StartupObjectAttribute(0), _ Global.System.Security.Permissions.PermissionSetAttribute _ (Global.System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _ Public Class ConvertImage Inherits System.Windows.Forms.AxHost Public Sub New() MyBase.New("59EE46BA-677D-4d20-BF10-8D8067CB8B32") End Sub Public Shared Function Convert(ByVal Image _ As System.Drawing.Image) As stdole.IPictureDisp Convert = GetIPictureFromPicture(Image) End Function End Classsealed public class ConvertImage : System.Windows.Forms.AxHost { private ConvertImage() : base(null) { } public static stdole.IPictureDisp Convert (System.Drawing.Image image) { return (stdole.IPictureDisp)System. Windows.Forms.AxHost .GetIPictureDispFromPicture(image); } }Agregue un método para convertir el archivo de icono en un archivo Image agregándolo a ImageList. Este código envía el archivo Image al método ConvertImage.Convert que se creó y, a continuación, devuelve el archivo al llamador.
Private Function getImage() As stdole.IPictureDisp Dim tempImage As stdole.IPictureDisp = Nothing Try Dim newIcon As Icon = My.Resources.Icon1 Dim newImageList As New ImageList newImageList.Images.Add(newIcon) tempImage = ConvertImage.Convert(newImageList.Images(0)) Catch ex As Exception MessageBox.Show(ex.Message) End Try Return tempImage End Functionprivate stdole.IPictureDisp getImage() { stdole.IPictureDisp tempImage = null; try { System.Drawing.Icon newIcon = Properties.Resources.Icon1; ImageList newImageList = new ImageList(); newImageList.Images.Add(newIcon); tempImage = ConvertImage.Convert(newImageList.Images[0]); } catch (Exception ex) { MessageBox.Show(ex.Message); } return tempImage; }
Compilar el código
Para este ejemplo se necesita:
- Un icono denominado Icon1 en los recursos del proyecto.
Vea también
Tareas
Cómo: Agregar barras de herramientas y elementos de barras de herramientas personalizados a Outlook
Cómo: Agregar menús y elementos de menú personalizados a Outlook
Cómo: Agregar o quitar recursos
Cómo: Especificar el icono de una aplicación (Visual Basic, C#)
Conceptos
Información general sobre el modelo de objetos de Outlook