用C#和VB.NET實現VS.NET或Office XP風格的菜單
小氣的神 2001.08.18
3. “MenuItemStyle”接口和VS.NET風格的菜單項
這個Project又將切換到C#語言。我是這樣想的:先針對普通菜單、Office200風格、VS.NET風格三種情況定義一個統一的接口(interface),其中包括畫Icon(DrawIcon)、畫分割條(DrawSeparator)、畫菜單背景(DrawBackground)、寫菜單項的文字(DrawMenuText)等功能;普通、Office2000和VS.NET根據各自不同的情況實現這個接口的Drawxxx的功能。然後從MenuItem繼承一個子類,象第二部分講的那樣Overrides 菜單項的兩個函數:OnMeasureItem和OnDrawItem,根據不同的風格調用上面實現的接口中的DrawXXX函數就可以了。最後我把這部分都分隔出來放在一個.CS文件中,單獨編譯成一個VSNET.Menu.DLL,你只用using VSNET.Menu ; 然後就可以象在第一部分那樣象使用普通的MenuItem那樣來用了,Demo源代碼中你還可以看到我定義了IconMenuItem的類,它有一個方法:MenuItemCreator(VSNET.Menu.IconMenuStyle sType , String sText , Bitmap bmp , System.EventHandler eh)可以完成生成需要的MenuItem。本來我想用資源文件或將圖片Icon等資源放在一個專門的文件中,然後由這個類來負責從資源文件或外部的類中獲得資源CreateMenuItem。但是是第一版,你會看到例程中我仍然用原始的New Bitmap()的方式直接從硬盤拿資源。當我看到它show出來時,先是很開心,然後發現還有許多要改進,想想其實做一個專業的菜單也需要花許多心思。
好吧讓我們看一下有關VS.