Надстройка Outlook 2007:Как добавить значок к кнопке msoControlButton

StackOverflow https://stackoverflow.com//questions/9705335

Вопрос

Фон:Я разрабатываю надстройку Outlook 2007 в VS2010 на C#.Конкретная вещь, которую я делаю, - это добавляю пункт меню в контекстное меню, связанное с электронным письмом.Я делаю это с помощью следующего кода:

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, которых у меня нет.Есть ли простой способ просто установить изображение или растровое изображение в Picture?

Спасибо.

Это было полезно?

Решение

Если вы хотите настроить на заказ, вы должны полагаться на подход AxHost ( См. Ссылку MSDN ) или PictureDispConverter , который является еще одним подходом созданный Microsoft на основе OleCreatePictureIndirect .

Если вы хотите использовать встроенные иконки, вы можете просто установить FaceId .Загрузите Галерея офисных иконок для просмотра значений GeneracodicCode Office 2007.

Другие советы

Следующий код использует System.Drawing.Bitmap (хранится как ресурс) и преобразует его в изображение, которое может быть присвоено 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);
    }
}     

Примечание:Добавьте изображение с именем Icon1 в ресурс.

Просто FYI, если вы хотите применить какие-либо офисные встроенные изображения в свою кнопку (просмотреть галерею изображения в Вот ), вы можете просто позвонить Getimagemso () Метод.

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

Это альтернативный подход к использованию свойства FaceID.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top