有时,您可能发现内置的图标库是不够的,可能想引入自已的图像(图标或图片)。下面介绍如何利用自定义图片的功能及如何使用库,用户界面中最酷的新功能之一。
1、自定义图片
(1)支持的图片格式
如果打算定制用户界面,那么也可能会考虑使用自已的图像来增添额外的感觉。然而,知道一些文件格式,以便于知道在特定的情形下应该使用那种类型。
一种用于自定义图片的好的格式是PNG格式。PNG文件允许全透明(其它可能的格式例如BMP、GIF和JPEG不支持),这意味着不会因为界面背景色的变化而导致自定义的图片变得与背景不匹配。然而,在某些情形下不允许使用PNG文件。例如,如果需要使用VBA的LoadPicture函数实时装载图像,就不能够使用PNG格式。因此,需要寻找一种替代的方法:或者不同的格式或者不同的方法来装载图像。
下表1显示了能够在自定义用户界面中使用的一些文件格式。
表1:用于自定义UI的一些可能的图片格式
图片扩展名
格式
PNG
如果计划附加图片到工程中,那么Portable Network Graphics是一种优秀的用于自定义UI的格式。不能够在LoadPicture函数中使用这种文件格式。
BMP
指位图图片格式。可以使用LoadPicture函数装载这种格式的图片。
ICO
指图标格式。
WMF
指Windows图元文件,可以使用LoadPicture函数装载这种格式的图片。
JPG、JPEG
JPEG(Joint Photographic Experts Group)格式提供较低品质的图像。
GIF
Graphic Interchange Format,与JPEG一样,提供较低品质的图像。
如果用户界面使用自定义图片,那么应该选择PNG图片格式。PNG格式是提供完全支持透明度的唯一格式,并且PNG图片是高可压缩的而不会丢失质量。相反,因为其低的图像质量,通常不推荐JPG和GIF格式。
(2)适合的图片尺寸和比例
尺寸和比例对在用户界面中显示清楚且明晰的图片是重要的。作为一条规则,图形应该是具有96dpi的16×16和32×32的尺寸。
(3)图像编辑资源
Paint.NET软件提供了一个极好的图像编辑器,支持JPEG、PNG和BMP图像,有很强大的功能。您可以在下面的站点中下载:
http://www.getpaint.net/index2.html2、在工程中添加自定义图片
(1)使用CustomUI Editor
要添加自定义图像,必须使用该控件的image属性。假设希望对按钮添加自定义图像,其XML代码如下:
<button id=“rxbtn“
label=“Custom Button“
image=“test_img“
size=“large“/>
注意到,图像的名字是test_img,并且没有指定文件扩展名。在XML压缩组里,相关联的文件指向该图像的正确位置。在本例中,如果查看相关联的XML文件(CustomUI.xml.rels),那么会发现下列代码段:
<Relationships xmlns=http://schemas.openxmlformats.org/package/2006/relationships>
<Relationships Type=http://schemas.openxmlformats.org/officeDocument/2006/relationships/image Target=”images/test_img.bmp” Id=”test_img” />
</Relationships>
相关的文件及其XML代码由CustomUI Editor自动生成。接下来,装载图像。
要使用CustomUI Editor来装载自定义图像,按照下列步骤:
(1)使用CustomUI Editor打开文档。
(2)添加自定义用户界面的XML代码。无论希望在哪里添加图像,都使用image属性并指定文件名,例如image=”test_img”。不需要担心文件扩展名。
(3)单击CustomUI Editor工具栏中的“Insert Icon”按钮。
(4)浏览包含图像的文件夹,打开该图像文件。
下图显示通过CustomUI Editor添加test_img文件,注意CustomUI Editor现在有一个额外的列列出了附加到工程中的所有图像。
这是装载自定义图片到UI中的一种非常容易的方法,但也可能是非常费时的,特别是要装载大量图片时。另一种方法是在运行时装载图片。
(2)在运行时装载自定义图片
如果需要在运行时切换图像,例如在运行时作出变化,那么需要使用该控件的getImage属性装载图像。
然而,这也带给我们另一个问题。此时,通常通过VBA的LoadPicture函数装载图像的方法。然而,这个函数不能处理PNG文件,而这种格式是功能区最好的图片格式。
下面的示例装载普通的BMP图片到切换按钮里。注意,用于装载位图文件的方法也能够用于图标文件和Windows图元文件,例如FileName.ico、FileName.wmf,等等。
<toggleButton
id=“rxtgl“
getImage=“rxtgl_getImage“
getLabel=“rxtgl_getLabel“
size=“large“
onAction=“rxtgl_Click“ />
使用getImage属性定义处理图片装载的回调。本例中,回调被命名为rxtgl_getImage并有下列签名:
Sub rxtgl_getImage(control as IRibbonControl, ByRef returnedVal)
因为本示例使用切换按钮,所以需要追踪切换状态,即按钮切换与否?这里使用全局的布尔变量来追踪状态。同时,需要onLoad事件来使该控件无效,确保根据切换按钮的单击装载图像。
在标准模块中输入下面的VBA代码:
Dim grxIRibbonUI As IRibbonUI
Dim gblnPressed As Boolean
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set grxIRibbonUI = ribbon
End Sub
Sub rxtgl_getImage(control As IRibbonControl, ByRef returnedVal)
Set returnedVal = LoadPicture(ThisWorkbook.Path & “\mex.bmp”)
If gblnPressed Then Set returnedVal = LoadPicture(ThisWorkbook.Path & “\usa.bmp”)
End Sub
Sub rxtgl_Click(control As IRibbonControl, pressed As Boolean)
gblnPressed = pressed
grxIRibbonUI.InvalidateControl (”rxtgl”)
End Sub
Sub rxtgl_getLabel(control As IRibbonControl, ByRef returnedVal)
returnedVal = “Mexico Rocks!”
If gblnPressed Then returnedVal = “The US Rocks!”
End Sub
下图显示了自定义的切换按钮。
3、使用GDI+装载PNG文件
下面介绍如何使用GDI+(Graphics Device Interface Plus)APIs装载PNG文件。
GDI+是Windows核心子系统之一,当需要发送这些对象到诸如显示器和/或打印机等设备时用作表现图形对象的接口。GDI+处理不同绘图对象的渲染,这里我们使用它来渲染PNG对象以便使其能被装载到UI。这需要一些其它的技术,即使用Windows APIs来实现,下面是代码模块,可以直接导入VBA工程中使用:
basGDIPlus.bas
该模块中包含了一个名为LoadImage的函数,可用来直接装载PNG文件。因此,在上例中,如果想使用LoadImage函数代替LoadPicture函数来装载PNG文件,那么需要将其与getImage属性相关的代码中修改为LoadImage函数:
Sub rxtgl_getImage(control As IRibbonControl, ByRef returnedVal)
Set returnedVal = LoadImage(ThisWorkbook.Path & “\mex.png”)
If gblnPressed Then Set returnedVal = LoadImage(ThisWorkbook.Path & “\usa.png”)
End Sub