Question

Arrière-plan:Je développe un complément Outlook 2007 dans VS2010 en C#.La chose spécifique que je fais est d'ajouter un élément de menu au menu contextuel associé à un e-mail.Je fais cela avec le code suivant :

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");
}

Problème:Je n'arrive pas à définir l'image.Les exemples Msdn s'appuient sur des fonctions de conversion AxHost que je n'ai pas.Existe-t-il un moyen simple de simplement définir une image ou un BitMap sur Image ?

Merci.

Était-ce utile?

La solution

Si vous voulez une image personnalisée, vous devez compter sur AxHost approche (voir la référence MSDN) ou PictureDispConverter ce qui est une autre approche créé par Microsoft basé sur OleCreatePictureIndirect.

Si vous souhaitez utiliser les icônes intégrées, vous pouvez simplement définir le FaceId.Télécharger Galerie d'icônes de bureau pour afficher Office 2007 FaceId valeurs.

Autres conseils

Le code suivant utilise un System.Drawing.Bitmap (stocké en tant que ressource) et le convertit en une image, attribuable à 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);
    }
}     

Note:Ajoutez une image avec le nom Icon1 dans la ressource.

Juste pour information, si vous souhaitez appliquer des images intégrées à votre bouton (consultez la galerie d'images dans ici), vous pouvez simplement appeler GetImageMso() méthode.

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

Il s’agit d’une approche alternative à l’utilisation FaceID propriété.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top