Domanda

Sfondo: sto sviluppando un componente aggiuntivo di Outlook 2007 in VS2010 in C #.La cosa specifica che sto facendo è aggiungere un menu-elemento al menu di scelta rapida associato a un'e-mail.Lo faccio con il seguente codice:

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: non può sembrare impostare l'immagine.Esempi MSDN si affidano alle funzioni di conversione asshost che non ho.C'è un modo semplice per impostare un'immagine o una bitmap in un'immagine?

Grazie.

È stato utile?

Soluzione

Se si desidera un'immagine personalizzata devi fare affidamento sull'approccio AxHost ( Vedi riferimento MSDN ) o PictureDispConverter che è un altro approccio creato da Microsoft basato su OleCreatePictureIndirect .

Se si desidera utilizzare le icone integrate è possibile semplicemente impostare FaceId .Scarica Galleria di icone di Office per visualizzare Office 2007 FaceId Valori.

Altri suggerimenti

Il codice seguente utilizza un System.Drawing.Bitmap (memorizzato come risorsa) e lo converte su un'immagine, che è assegnabile 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: aggiungi immagine con nome icon1 in risorsa.

Just fyi, se si desidera applicare qualsiasi ufficio incorporato immagini sul pulsante (visualizzare la galleria di immagini in qui ), puoi semplicemente chiamare GetImagemso () Metodo.

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

Questo è un approccio alternativo per l'utilizzo della proprietà FaceID.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top