понедельник, июля 18, 2005

CommandBarButton.Picture

Часа 2 возился, чтоб изобразить картинку на кнопке в Ворде. Какой только фигни многомудрой не понаписано на эту тему....
Ё-моё. А всё оказалось достаточно просто.

Несколько строчек кода

string ns = this.GetType().Namespace;
Assembly CurrentAssembly = this.GetType().Assembly;
System.IO.Stream

imgStreamPic = CurrentAssembly.GetManifestResourceStream(ns+"." + "ConfigPicture.bmp"),
imgStreamMask = CurrentAssembly.GetManifestResourceStream(ns+
"." + "ConfigMask.bmp"
);
MyAxHost ax = new MyAxHost
();
stdole.
IPictureDisp
Pic = MyAxHost.IPictureDisp(Image
.FromStream(imgStreamPic)),
Mask =
MyAxHost.IPictureDisp( Image
.FromStream(imgStreamMask));
ConfigureButton.Picture = Pic;
ConfigureButton.Mask = Mask;


И простой класс

public class MyAxHost : System.Windows.Forms .AxHost
{
public MyAxHost() : base( "59EE46BA-677D-4d20-BF10-8D8067CB8B33"
){ }
public static stdole.IPictureDisp IPictureDisp(System.Drawing.Image
Image)
{
return ((stdole.IPictureDisp)(AxHost
.GetIPictureDispFromPicture(Image)));
}
}

И ConfigureButton имеет картинку.

3 комментария:

Анонимный комментирует...

Видел я многие посты про иконки в углах офиса многоликого, и полны они великой суеты вокруг AxHost, IPictureDisp, GetIPictureDispFromPicture. Этот пост лучше других и есть внём сила!

/me "о продукции майкрософт" Кривое не может сделаться прямым, и чего нет, того нельзя считать. (Экклесиаст стих 15)

Анонимный комментирует...

Попарился немного пока допер почему у меня не отображается картинка на кнопке.
не хватало магического кода

ConfigureButton.Style = MsoButtonStyle.msoButtonIconAndCaption;

pivovarov комментирует...

О, прямо в тему! Спасибо.