【51CTO精彩译文】正如你从我过去几个月的博文中所了解的那样,Visual Studio 2010将会采用基于WPF的命令窗口,除了支持采用RBG=0,254,0做背景的24位位图显示外,还添加支持32位位图显示,其中包含透明度转换图片命令。虽然Visual Studio 2010 Beta1只支持新的显示模式,但Beta2将会在此基础上向后兼容过去的显示模式。
Visual Studio 2005的工具窗口以及其他一些更高的版本,一贯是要么只支持含内置透明度转换图片命令的32位位图显示模式,要么只支持采用RBG=0,254,0做背景的24位位图显示模式。而Visual Studio 2010可以同时支持这两种工作模式。
对于用户自定义图片时的第三个也是最后一个问题,出现在你想要直接设置(而不是靠命令)带命令栏图片的时候。一些人之所以要采用这种直接设置的方法,是因为这样可以避免产生一些附带的、不必要的动态链接库,而就我个人而言,我一般不采用或者推荐这种方法。除了这种情况:当需要提供一些没有后台菜单输入命令的列表视图或者树状视图的背景菜单时(因为对于这类列表视图或菜单视图的背景菜单操作,“添加”、“编辑”、“删除”等这类的动作,都不是全局性的)。为了使这种背景菜单从外观和感觉上100%的与Visual Studio相一致,我建立了一个CommandBarPopup。虽然我没有专门撰文来说明这一点,但它的基本思想是创建一个命令栏弹出调用:
- myCommandBarPopup=dte.CommandBars.Add(Name:="MyCommandBar", Position:=MsoBarPosition.msoBarPopup, Temporary:=True)
- and then add CommandbarButtons calling:
- myCommandBarButton=DirectCast(myCommandBarPopup.Controls.Add(...), CommandBarButton)
- and then set the Caption, Picture and Mask properties:
- myCommandBarButton.Caption = "..."
- myCommandBarButton.Picture = ...
- myCommandBarButton.Mask = ...
然后再为鼠标点击事件设置一个处理程序。
请注意,在上述操作中我们必须要提供一个“图片”位图值和“掩码”位图,Visual Studio 2005和Visual Studio 2008中“图片”位图在任何颜色背景下都应该是24位的位图,而“掩码”位图采用的是白色=255,255,255像素(这本应该是透明的颜色)、黑色=0,0,0像素(这实际是彩色图片的像素)的位图。由于对于每个按钮都要提供两个位图值,所以这是相当不方便的,大多数人会采用用户自定义的方法来从图片镜像中产生掩码位图。
然而,这种方法在Visual Studio 2010中是行不通的。因为Visual Studio 2010支持含内置透明度转换的32位位图,微软不推荐使用CommandBarButton.Mask属性(那些已经使用过了的除外)。因此,如果你要在我所提及的任一种情况中加载Visual Studio 2005或者2008来使用CommandBarButton.Mask属性,那么你需要重新访问和调整CommandBarButton.Mask,从而来让它顺利的在Visual Studio 2009中工作。如果你想在Visual Studio 2005、2008和2010中使用相同的动态链接库,一种方法是对Visual Studio 2010版本设计带内置透明度项的32位位图镜像,对Visual Studio 2005和2008版本产生24位的“图片”位图和“掩码”位图。如果你只是要加载到Visual Studio 2010中,则不必再使用CommandBarButton.Picture的方法,这样可以避免生成不必要的动态链接库,因为Visual Studio 2010将会自动的去掉多余的动态链接库。