Ё-моё. А всё оказалось достаточно просто.
Несколько строчек кода
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;
О, прямо в тему! Спасибо.
Отправить комментарий