讲解:自己做出VB.NET风格的右键菜单

添加人:gamefriends二级(651分)   添加时间:2007-09-18    阅读次数:1283  收藏此教程

  自己做出VB.NET风格的右键菜单(简单,实用)

  此主题相关图片如下:

 1class MyMenuItem : System.Windows.Forms.MenuItem
 2{
 3    public MyMenuItem()
 4    {
 5        //这里很重要,必须把OwerDraw设为true,庋梢宰约夯说ィ裨虮闶侨貌僮飨低郴说チ耍系氖莊alse
 6        this.OwnerDraw = true;
 7    }

 8    protected override void OnDrawItem(SysDrawItemEventArgs e)
 9    {
10        //要重画菜单,是没有OnPaint方法重载的,只有重载OnDrawItem方法!
11        Graphics g = e.Graphics;
12        g.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿
13        Font f = new Font(FontFamily.GenericSerif, 12, FontStyle.Regular, GraphicsUnit.Pixel);//设定菜单的字体
14        Pen p = new Pen(Color.Navy, 1);//这是画边框的字体
15        if (e.State == DrawItemState.NoAccelerator)//一开始右键单击出现菜单,但是鼠标并没有移上去
16        { //用白色的底色
17            g.FillRectangle(Brushes.WhiteSmoke, e.Bounds.X - 2, e.Bounds.Y - 2, 121, 23);
18        }

19        //鼠标移上去,但是并没有单击
20        if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
21        {
22            //花边框和底色
23            g.FillRectangle(Brushes.LightSteelBlue, e.Bounds.X, e.Bounds.Y, 109, 20);
24            g.DrawLine(p, e.Bounds.X, e.Bounds.Y, e.Bounds.X, e.Bounds.Y + 19);
25            g.DrawLine(p, e.Bounds.X, e.Bounds.Y + 19, e.Bounds.X + 109, e.Bounds.Y + 19);
26            g.DrawLine(p, e.Bounds.X + 109, e.Bounds.Y + 19, e.Bounds.X + 109, e.Bounds.Y);
27            g.DrawLine(p, e.Bounds.X + 109, e.Bounds.Y, e.Bounds.X, e.Bounds.Y);
28        }

29        //显示文字
30        g.DrawString(this.Text, f, Brushes.Black, e.Bounds.X, e.Bounds.Y);
31        g.Dispose();
32    }

33    //这是很重要的,这给你的菜单定义了大小,高20,宽100,否则你的菜单什么也看不到
34    protected override void OnMeasureItem(MeasureItemEventArgs e)
35    {
36        e.ItemHeight = 20;
37        e.ItemWidth = 100;
38    }

39}

  说明:这里我没有画按钮按下时的样子(懒:),主要是以后进一步改进),当然也没有画图标,也是为了以后改进,这只是一个初步的形态,大家看看有什么更高的方法?!

1页 第1上一页1下一页
相关的教程: VB.NET
收藏此教程

当前平均分: 0.0(0 次打分)

-5-4-3-2-1012345
评论主题
您的大名
您的评论
验证码 点击换一个验证码
知识库搜索: