2012-03-14 20 views
6

背景:Outlook 2007アドインをVS2010でC#で開発しています。私がやっている具体的なことは、電子メールに関連するコンテキストメニューにメニュー項目を追加することです。私は次のコードでこれを行います:Outlook 2007アドイン:msoControlButtonにアイコンを追加する方法

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

問題:画像を設定できないようです。 Msdnの例は私が持っていないAxHost変換関数に依存しています。画像やビットマップを画像に設定する簡単な方法はありますか?

ありがとうございました。

答えて

6

カスタムイメージをしたい場合は、OleCreatePictureIndirectに基づいて別のアプローチcreated by MicrosoftあるAxHostアプローチ(see MSDN reference)またはPictureDispConverterに依存する必要があります。

内蔵アイコンを使用したい場合は、FaceIdを設定することができます。 Office Icons GalleryをダウンロードしてOffice 2007 FaceIdの値を表示してください。リソースに名前ICON1た画像を追加:

+1

あなたは最高です。ありがとう。 – kmarks2

+0

OfficeアイコンギャラリーにFaceIdsがもう存在しないようです。新しいスタイルのアイコンだけ。彼らはhttp://www.outlookexchange.com/articles/toddwalker/BuiltInOLKIcons.aspでもそれらを持っているようです。 –

3

次のコードは、(リソースとして格納されている)System.Drawing.Bitmapを使用して画像に変換し、その注

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

Office.CommandBarButton.Pictureに割り当て可能です。

1

オフィスのビルトインイメージをボタンに適用したい場合は(画像ギャラリーのhereを参照)、単にGetImageMso()メソッドを呼び出すことができます。

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

これはFaceIDプロパティを使用する別の方法です。

+0

私はその画像を試しましたが、少なくとも2007年には画像が正しく表示されないことが判明しました。透過的な属性が失われているように見えます。また、Outlookでは、関数を呼び出すためにさらに1つのリダイレクトレベルが必要です。Globals.Addin.Application.ActiveExplorer()。CommandBars.GetImageMso( "AcceptInvitation"、16、16); –

関連する問題