/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace OwnerDrawnMenu { /// <summary> /// Summary description for OwnerDrawnMenu. /// </summary> public class OwnerDrawnMenu : System.Windows.Forms.Form { internal System.Windows.Forms.ImageList imgMenu; internal System.Windows.Forms.MainMenu mainMenu1; internal System.Windows.Forms.MenuItem mnuFile; internal System.Windows.Forms.MenuItem mnuNew; internal System.Windows.Forms.MenuItem mnuOpen; internal System.Windows.Forms.MenuItem mnuSave; private System.ComponentModel.IContainer components; public OwnerDrawnMenu() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.components = new System.ComponentModel.Container(); System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(OwnerDrawnMenu)); this.imgMenu = new System.Windows.Forms.ImageList(this.components); this.mainMenu1 = new System.Windows.Forms.MainMenu(); this.mnuFile = new System.Windows.Forms.MenuItem(); this.mnuNew = new System.Windows.Forms.MenuItem(); this.mnuOpen = new System.Windows.Forms.MenuItem(); this.mnuSave = new System.Windows.Forms.MenuItem(); // // imgMenu // this.imgMenu.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit; this.imgMenu.ImageSize = new System.Drawing.Size(16, 16); this.imgMenu.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imgMenu.ImageStream"))); this.imgMenu.TransparentColor = System.Drawing.Color.Transparent; // // mainMenu1 // this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuFile}); // // mnuFile // this.mnuFile.Index = 0; this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.mnuNew, this.mnuOpen, this.mnuSave}); this.mnuFile.Text = "File"; // // mnuNew // this.mnuNew.Index = 0; this.mnuNew.OwnerDraw = true; this.mnuNew.Text = "New"; this.mnuNew.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.mnu_DrawItem); this.mnuNew.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.mnu_MeasureItem); // // mnuOpen // this.mnuOpen.Index = 1; this.mnuOpen.OwnerDraw = true; this.mnuOpen.Text = "Open"; this.mnuOpen.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.mnu_DrawItem); this.mnuOpen.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.mnu_MeasureItem); // // mnuSave // this.mnuSave.Index = 2; this.mnuSave.OwnerDraw = true; this.mnuSave.Text = "Save"; this.mnuSave.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.mnu_DrawItem); this.mnuSave.MeasureItem += new System.Windows.Forms.MeasureItemEventHandler(this.mnu_MeasureItem); // // OwnerDrawnMenu // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(292, 266); this.Menu = this.mainMenu1; this.Name = "OwnerDrawnMenu"; this.Text = "Owner-Drawn Menu"; } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.Run(new OwnerDrawnMenu()); } private void mnu_MeasureItem(object sender, System.Windows.Forms.MeasureItemEventArgs e) { // Retrieve current item. MenuItem mnuItem = (MenuItem)sender; Font menuFont = new Font("Tahoma", 8); // Measure size needed to display text. // We add 30 pixels to the width to allow a generous spacing for the image. e.ItemHeight = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Height + 5; e.ItemWidth = (int)e.Graphics.MeasureString(mnuItem.Text, menuFont).Width + 30; } private void mnu_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { // Retrieve current item. MenuItem mnuItem = (MenuItem)sender; // This defaults to the highlighted background if selected. e.DrawBackground(); // Retrieve the image from an ImageList control. Image menuImage = imgMenu.Images[mnuItem.Index]; // Draw the image. e.Graphics.DrawImage(menuImage, e.Bounds.Left + 3, e.Bounds.Top + 2); // Draw the text with the supplied colors and in the set region. e.Graphics.DrawString(mnuItem.Text, e.Font, new SolidBrush(e.ForeColor), e.Bounds.Left + 25, e.Bounds.Top + 3); } } } OwnerDrawnMenu.zip( 28 k)