Лента была лучшим путем, который я нашел, однако у меня были проблемы с поиском отличных практических рекомендаций для проекта от начала до конца, поэтому я сделаю небольшую запись здесь.
Чтобы добавить кнопку на ленту только для существующих почтовых сообщений, включая изображение для кнопки.
Используя VS 2010 Новый проект Office, выберите «Outlook 2007 add in» и введите имя для своегопроект.В ваш недавно созданный проект, добавьте новый элемент «Лента (XML)», назовите его так, как вы хотите, я назову его CustomRibbon, откройте только что созданный файл CustomRibbon.xml и измените узел вкладки, чтобы иметь следующий
<tab idMso="TabReadMessage">
<group insertBeforeMso="GroupActions" id="CustomGroup" label="GroupNameThatShowsInOutlook">
<button id="btnCustomButton"
label = "Text For The Custom Button"
supertip="tip for the button hover"
onAction ="ButtonClicked"
size="large"
getImage="GetCustomButtonImage" />
</group>
</tab>
Затем он имеет 2 функции обратного вызова для файла CustomRibbon.cs, одна называется GetCustomButtonImage, а другая - ButtonClicked.
откройте CustomRibbon.cs, чтобы заполнить это, в области обратных вызовов ленты добавьте следующее
public void ButtonClicked(Office.IRibbonControl Control)
{
//Do work here
}
также добавьте следующее в том же разделе
public stdole.IPictureDisp GetCustomButtonImage(Office.IRibbonControl control)
{
System.Drawing.Image myImage;
myImage = OutlookAddIn.Properties.Resources.ImageName;
return AxHostConverter.ImageToPictureDisp(myImage);
}
это покажет, что пропущен класс, мы вскоре к этому вернемся, но сначала мы добавимпоследняя часть нам нужна в CustomRibbon.cs.В области Члены IRibbonExtensibility в GetCustomUI измените существующий код
public string GetCustomUI(string ribbonID)
{
if (ribbonID == "Microsoft.Outlook.Mail.Read")
{
return GetResourceText("OutlookAddIn.CustomRibbon.xml");
}
else
{
return "";
}
}
. Добавьте новый класс в свой проект, назовите его AxHostConverter, добавьте его в топ
, используя System.Windows.Forms.;using System.Drawing;
Затем измените класс так, чтобы он имел следующий код
class AxHostConverter : AxHost
{
private AxHostConverter() : base("") { }
static public stdole.IPictureDisp ImageToPictureDisp(Image image)
{
return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
}
static public Image PictureDispToImage(stdole.IPictureDisp pictureDisp)
{
return GetPictureFromIPicture(pictureDisp);
}
}
Добавьте изображение для вашей кнопки в проект и измените функцию GetCustomButtonImage, чтобы использовать этот ресурс.Я использовал PNG, и мне повезло, что прозрачные пленки хорошо отображались.
И, наконец, все, что нужно оставить, это добавить следующее в ThisAddIn.cs
protected override Microsoft.Office.Core.IRibbonExtensibility CreateRibbonExtensibilityObject()
{
return new CustomRibbon();
}
Добавить любой код, какой вы естьжелая ButtonClicked, и вы настроены.
Развертывание с использованием Clickonce и установка довольно проста.