Pregunta

Fondo:Estoy desarrollando un complemento de Outlook 2007 en VS2010 en C#.Lo específico que estoy haciendo es agregar un elemento de menú al menú contextual asociado con un correo electrónico.Hago esto con el siguiente código:

private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
   Application.ItemContextMenuDisplay += Application_ItemContextMenuDisplay;
}

private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}

private void Application_ItemContextMenuDisplay(Office.CommandBar commandBar, Outlook.Selection selection)
{
   var cmdButtonCallContact = (Office.CommandBarButton)commandBar.Controls.Add(Office.MsoControlType.msoControlButton, 1, System.Reflection.Missing.Value, 6, System.Reflection.Missing.Value);

   cmdButtonCallContact.Caption = "&Foo";
   //cmdButtonCallContact.Picture = ?
   cmdButtonCallContact.Click += cmdButtonCopy_Click;
}

private void cmdButtonCopy_Click(Office.CommandBarButton ctrl, ref bool canceldefault)
{
   System.Windows.Forms.MessageBox.Show("Bar");
}

Problema:Parece que no puedo configurar la imagen.Los ejemplos de MSDN se basan en funciones de conversión de AxHost que no tengo.¿Existe una forma sencilla de configurar una imagen o un mapa de bits como imagen?

Gracias.

¿Fue útil?

Solución

Si desea una imagen personalizada, debe confiar en AxHost acercarse (ver referencia de MSDN) o PictureDispConverter cual es otro enfoque creado por microsoft Residencia en OleCreatePictureIndirect.

Si desea utilizar los iconos integrados, simplemente puede configurar el FaceId.Descargar Galería de iconos de oficina para ver Office 2007 FaceId valores.

Otros consejos

El siguiente código utiliza un System.Drawing.Bitmap (almacenado como un recurso) y lo convierte en una imagen, que se puede asignar a Office.CommandBarButton.Picture

private Office.CommandBarButton buttonOne;
void createbutton()
{
    Office.CommandBar newMenuBar = Inspector.CommandBars.Add("EAD", Office.MsoBarPosition.msoBarTop, false, true);
    buttonOne = (Office.CommandBarButton)newMenuBar.Controls.Add(Office.MsoControlType.msoControlButton, 1, missing, missing, true);buttonOne.Caption = "Ansari";
    buttonOne.Style = Office.MsoButtonStyle.msoButtonIconAndWrapCaptionBelow;                   

    buttonOne.Picture = getImage();
    //Register send event handler
    buttonOne.Click += buttonOne_Click;
    newMenuBar.Visible = true;
}
void buttonOne_Click(Office.CommandBarButton Ctrl, ref bool CancelDefault)
{
    MessageBox.Show("Hi");
}
private stdole.IPictureDisp getImage()
{
    stdole.IPictureDisp tempImage = null;
    try
    {
        System.Drawing.Bitmap newIcon = Properties.Resources.Icon1;
        System.Windows.Forms.ImageList newImageList = new System.Windows.Forms.ImageList();                             
        newImageList.Images.Add(newIcon);
        tempImage = ConvertImage.Convert(newImageList.Images[0]);
    }
    catch (Exception ex)
    {
        System.Windows.Forms.MessageBox.Show(ex.Message);
    }
    return tempImage;
}
sealed 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);
    }
}     

Nota:Agregue una imagen con el nombre Icon1 en el recurso.

Solo para su información, si desea aplicar alguna imagen integrada de Office a su botón (vea la galería de imágenes en aquí), simplemente puedes llamar ObtenerImageMso() método.

CommandBarButton.Picture = Application.CommandBars.GetImageMso("ImageMSO", 16, 16);

Este es un enfoque alternativo al uso FaceID propiedad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top