繁体中文
设为首页
加入收藏
当前位置:.Net技术首页 >> Windows开发 >> 自己做出VS.NET风格的右键菜单

自己做出VS.NET风格的右键菜单

2004-10-01 08:26:10  作者:  来源:互联网  浏览次数:18  文字大小:【】【】【
简介:自己做出VS.NET风格的右键菜单 自己做出VS.NET风格的右键菜单(简单,实用) 此主题相关图片如下:class MyMenuItem : System.Windows.Forms.MenuItem { public MyMenuItem() { //这里很重要,必须把OwerD...
关键字:菜单 风格 自己 NET VS

自己做出VS.NET风格的右键菜单

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

此主题相关图片如下:class MyMenuItem : System.Windows.Forms.MenuItem

{

public MyMenuItem()

{

//这里很重要,必须把OwerDraw设为true,这样可以自己画菜单,否则便是让操作系统画菜单了,默认的是false

this.OwnerDraw=true;

}

protected override void OnDrawItem(SysDrawItemEventArgs e)

{

//要重画菜单,是没有OnPaint方法重载的,只有重载OnDrawItem方法!

Graphics g=e.Graphics;

g.SmoothingMode=SmoothingMode.AntiAlias;//抗锯齿

Font f = new Font(FontFamily.GenericSerif, 12, FontStyle.Regular, GraphicsUnit.Pixel);//设定菜单的字体

Pen p=new Pen(Color.Navy,1);//这是画边框的字体

if(e.State==DrawItemState.NoAccelerator)//一开始右键单击出现菜单,但是鼠标并没有移上去

{ //用白色的底色

g.FillRectangle(Brushes.WhiteSmoke,e.Bounds.X-2,e.Bounds.Y-2,121,23);

}

//鼠标移上去,但是并没有单击

if ((e.State & DrawItemState.Selected)==DrawItemState.Selected)

{

//花边框和底色

g.FillRectangle(Brushes.LightSteelBlue,e.Bounds.X,e.Bounds.Y,109,20);

g.DrawLine(p,e.Bounds.X,e.Bounds.Y,e.Bounds.X,e.Bounds.Y+19);

g.DrawLine(p,e.Bounds.X,e.Bounds.Y+19,e.Bounds.X+109,e.Bounds.Y+19);

g.DrawLine(p,e.Bounds.X+109,e.Bounds.Y+19,e.Bounds.X+109,e.Bounds.Y);

g.DrawLine(p,e.Bounds.X+109,e.Bounds.Y,e.Bounds.X,e.Bounds.Y);

}

//显示文字

g.DrawString(this.Text,f,Brushes.Black,e.Bounds.X,e.Bounds.Y);

g.Dispose();

}

//这是很重要的,这给你的菜单定义了大小,高20,宽100,否则你的菜单什么也看不到

protected override void OnMeasureItem(MeasureItemEventArgs e)

{

e.ItemHeight=20;

e.ItemWidth=100;

}

}

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

责任编辑:admin
相关文章