VS 2010中CommandBarButton.Mask屬性的使用
原創(chuàng)【51CTO精彩譯文】正如你從我過去幾個(gè)月的博文中所了解的那樣,Visual Studio 2010將會(huì)采用基于WPF的命令窗口,除了支持采用RBG=0,254,0做背景的24位位圖顯示外,還添加支持32位位圖顯示,其中包含透明度轉(zhuǎn)換圖片命令。雖然Visual Studio 2010 Beta1只支持新的顯示模式,但Beta2將會(huì)在此基礎(chǔ)上向后兼容過去的顯示模式。
Visual Studio 2005的工具窗口以及其他一些更高的版本,一貫是要么只支持含內(nèi)置透明度轉(zhuǎn)換圖片命令的32位位圖顯示模式,要么只支持采用RBG=0,254,0做背景的24位位圖顯示模式。而Visual Studio 2010可以同時(shí)支持這兩種工作模式。
對(duì)于用戶自定義圖片時(shí)的第三個(gè)也是最后一個(gè)問題,出現(xiàn)在你想要直接設(shè)置(而不是靠命令)帶命令欄圖片的時(shí)候。一些人之所以要采用這種直接設(shè)置的方法,是因?yàn)檫@樣可以避免產(chǎn)生一些附帶的、不必要的動(dòng)態(tài)鏈接庫,而就我個(gè)人而言,我一般不采用或者推薦這種方法。除了這種情況:當(dāng)需要提供一些沒有后臺(tái)菜單輸入命令的列表視圖或者樹狀視圖的背景菜單時(shí)(因?yàn)閷?duì)于這類列表視圖或菜單視圖的背景菜單操作,“添加”、“編輯”、“刪除”等這類的動(dòng)作,都不是全局性的)。為了使這種背景菜單從外觀和感覺上100%的與Visual Studio相一致,我建立了一個(gè)CommandBarPopup。雖然我沒有專門撰文來說明這一點(diǎn),但它的基本思想是創(chuàng)建一個(gè)命令欄彈出調(diào)用:
- 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 = ...
然后再為鼠標(biāo)點(diǎn)擊事件設(shè)置一個(gè)處理程序。
請(qǐng)注意,在上述操作中我們必須要提供一個(gè)“圖片”位圖值和“掩碼”位圖,Visual Studio 2005和Visual Studio 2008中“圖片”位圖在任何顏色背景下都應(yīng)該是24位的位圖,而“掩碼”位圖采用的是白色=255,255,255像素(這本應(yīng)該是透明的顏色)、黑色=0,0,0像素(這實(shí)際是彩色圖片的像素)的位圖。由于對(duì)于每個(gè)按鈕都要提供兩個(gè)位圖值,所以這是相當(dāng)不方便的,大多數(shù)人會(huì)采用用戶自定義的方法來從圖片鏡像中產(chǎn)生掩碼位圖。
然而,這種方法在Visual Studio 2010中是行不通的。因?yàn)閂isual Studio 2010支持含內(nèi)置透明度轉(zhuǎn)換的32位位圖,微軟不推薦使用CommandBarButton.Mask屬性(那些已經(jīng)使用過了的除外)。因此,如果你要在我所提及的任一種情況中加載Visual Studio 2005或者2008來使用CommandBarButton.Mask屬性,那么你需要重新訪問和調(diào)整CommandBarButton.Mask,從而來讓它順利的在Visual Studio 2009中工作。如果你想在Visual Studio 2005、2008和2010中使用相同的動(dòng)態(tài)鏈接庫,一種方法是對(duì)Visual Studio 2010版本設(shè)計(jì)帶內(nèi)置透明度項(xiàng)的32位位圖鏡像,對(duì)Visual Studio 2005和2008版本產(chǎn)生24位的“圖片”位圖和“掩碼”位圖。如果你只是要加載到Visual Studio 2010中,則不必再使用CommandBarButton.Picture的方法,這樣可以避免生成不必要的動(dòng)態(tài)鏈接庫,因?yàn)閂isual Studio 2010將會(huì)自動(dòng)的去掉多余的動(dòng)態(tài)鏈接庫。