Office Ribbon 大图和小图

Office Ribbon large and small images

office 功能区中的图像可以大 (32x32) 或小 (16x16)。如果它们被指定为大,但 window 太窄而不适合它们,那么它们会自动变小。默认情况下,这些只是大图的压缩版。

有一份办公室设计文档(后来消失了)建议人们应该适当地设计小图标,并且它们不应该只是大图标的小版本,因为压缩到 16x16 并不总是很好。很懂事。

但是 XML 真的有人这样做吗?像 Button 这样的元素似乎只有一个图像属性。我希望有两个,largeImage 和 smallImage(比如说)。

这真的需要可怕的回调吗?在这种情况下,如何捕捉功能区决定调整图像大小的事件? (由于多种原因,功能区回调与 VBA 一团糟。)

功能区 XML 没有指定大图标和小图标作为其定义的一部分的选项。如果您使用 image 属性,那么您只能提供一张图片。

也没有办法赶上 whether/when Office 减小了功能区的大小。您必须做一些研究,检查哪个 window 宽度触发调整大小,然后您可以使用 Application 对象的 WindowResize 事件使控件无效,更改图片(并且可能控件大小)。

为了提供多个图标,您需要使用回调属性 getImage 来告诉功能区使用哪张图片。这不像传递存储在 Office 文档中的文件的字符串值那么简单,因为回调函数需要一个 IPictureDisp 对象;图像需要作为文件存储在 Office 文档之外。

使用 getImage 的复杂性在接近文章末尾的 Customizing the 2007 Office Fluent Ribbon for Developers (Part 1 of 3) 中进行了描述,但那里提供的代码是针对 .NET Framework 的。

使用 VBA 编码实际上更容易一些,因为提供 IPictureDispstdOle 库是一个办公库。您需要设置对库的引用 - 在 VBA 编辑器的 Tools/References 中,它被标记为 OLE Automation。请注意,这不适用于图形 png 文件格式 - 库有点旧...

Public Sub GetIconImage(control As IRibbonControl, ByRef image)     
  Dim sPicPath As String
  Dim stdPic As StdPicture

  sPicPath = "C:\Users\[userName]\Pictures\test.jpg"  'Schweiz.png"
  Set stdPic = stdole.StdFunctions.LoadPicture(sPicPath)
  Set image = stdPic
End Sub