在功能区中使用.ico图像

本文关键字:ico 图像 功能区 | 更新日期: 2023-09-27 18:34:38

我有一个具有自定义功能区的 c# 加载项,但是,我没有按钮的图像。我没有.bmp文件,只有.ico。如果可能的话,最好不必转换任何东西。



功能区是通过 XML 创建的,不是 Visual Studio 功能区设计器

在功能区中使用.ico图像

有两种可能的方法可以完成工作。MSDN 中的"为开发人员自定义 2007 Office Fluent 功能区"一文中介绍了这两个问题:

  1. 使用该元素的 loadImage 属性,可以指定可以加载所有图像的回调。设置此回调过程后,Office 将调用回调过程,并从加载图像的每个控件的 image 属性传递字符串。不需要多次实现 getImage 回调,例如对需要图像的每个控件实现一次。

    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="GetImage"> <!-- Later in the markup --> <button id="myButton" image="image.jpg" />

为了提供按钮的图像,Office 调用 GetImage 函数。它传递参数"mypic.jpg",并期望返回一个 IPictureDisp 对象。通过使用此技术,可以编写单个回调过程来返回自定义所需的所有图像,而无需编写每个控件的 getImage 回调。请注意,当您调用功能区的 InvalidateControl 方法或 InvalidateControl 方法时,不会再次调用 loadImage 回调。对于需要在运行时动态更改图像的控件,请使用 getImage 回调。

例如,回调可能如下所示:

 public stdole.IPictureDisp GetImage(string imageName)
 {
   return
      PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
 }
  1. 当您需要动态加载图像时,可以使用第二种方法。您需要指定回调函数名称,而不是 image 属性:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" loadImage="GetImage"> <!-- Later in the markup --> <button id="myButton" getImage="GetImageCallback.jpg" />

getImage 回调方法必须返回一个标准。IPictureDisp 类型,因此通常需要将图像转换为此类型。若要执行这些转换,可以使用以下 PictureConverter 类,该类继承自 AxHost 类。

 internal class PictureConverter : AxHost
 {
     private PictureConverter() : base(String.Empty) { }
     static public stdole.IPictureDisp ImageToPictureDisp(Image image)
     {
         return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
     }
     static public stdole.IPictureDisp IconToPictureDisp(Icon icon)
     {
          return ImageToPictureDisp(icon.ToBitmap());
      }
     static public Image PictureDispToImage(stdole.IPictureDisp picture)
     {
          return GetPictureFromIPicture(picture);
     }
  }

例如,回调可能如下所示:

 public stdole.IPictureDisp GetImageCallback(IRibbonControl control)
 {
     return
       PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
 }

这取决于你的方式是选择。

从 将自定义图像添加到 excel 功能区中的按钮以及如何将系统.绘图图标转换为系统.绘图.图像?

在代码隐藏中,设置映像:

customButton1.Image = new Icon("icon.ico").ToBitmap();