很多Windows 應用程序中的控件可以手工繪製,來達到更加生動的效果,可以使用窗體組件的ownerdraw屬性來達到這個目的。Menu就是一個這樣的組件,它允許我們手工繪製其界面。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> 這篇文章的主要目的在於向你解釋如何用特定的字體,圖片,背景顏色以及其他的圖形對象來繪製自己定製的菜單。 第一步:創建一個簡單的Windows Form應用程序 在默認的窗體上,添加一個“MainMenu”控件, 創建如下形式的菜單 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
在這裏我們需要手工繪製的菜單不僅僅是頂級菜單,而且包括子菜單 對每個菜單項而言,手工繪製將調用如下兩個函數.. DrawItem . 這個函數裏將加入實際的繪圖邏輯. object sender, System.Windows.Forms.DrawItemEventArgs e) object sender, System.Windows.Forms.MeasureItemEventArgs e) 現在我們需要爲子菜單添加DrawItem 和 MeasureItem 事件處理函數. 對所有子菜單,我們創建不同的事件函數 object sender, System.Windows.Forms.MeasureItemEventArgs e) object sender, System.Windows.Forms.DrawItemEventArgs e) 注意:這裏我們並不是對每個菜單項都創建一個相應的事件處理函數,儘管你可以這樣做。相反的,我們通過一個通用的事件處理函數(mi_TopMenuItem_DrawItem)來處理所有頂級菜單項(File/Options/Help)的DrawItem事件,一個通用的事件處理函數來處理所有頂級菜單項的MeasureItem事件;一個通用的事件處理函數(mi_SubMenuItem_DrawItem)來處理所有的子菜單項(Open/Close…About)的DrawItem事件,一個通用的事件處理函數(mi_SubMenuItem_MeasureItem)來處理所有的子菜單的MeasureItem事件。 下面是頂級菜單的事件處理函數
編譯並執行.
About the Author Shripad Kulkarni |