自己做出VB.NET风格的右键菜单
敬业的IT人
互联网
佚名
2008-5-23 21:12:53
自己做出VB.NET风格的右键菜单(简单,实用)
此主题相关图片如下:class MyMenuItem : System.Windows.Forms.MenuItem
以下是引用片段:
{
publicMyMenuItem()
{
//这里很重要,必须把OwerDraw设为true,这样可以自己画菜单,否则便是让操作系统画菜单了,默认的是false
this.OwnerDraw=true;
}
protectedoverridevoidOnDrawItem(SysDrawItemEventArgse)
{
//要重画菜单,是没有OnPaint方法重载的,只有重载OnDrawItem方法!
Graphicsg=e.Graphics;
g.SmoothingMode=SmoothingMode.AntiAlias;//抗锯齿
Fontf=newFont(FontFamily.GenericSerif,12,FontStyle.Regular,GraphicsUnit.Pixel);//设定菜单的字体
Penp=newPen(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,否则你的菜单什么也看不到
protectedoverridevoidOnMeasureItem(MeasureItemEventArgse)
{
e.ItemHeight=20;
e.ItemWidth=100;
}
}
说明:这里我没有画按钮按下时的样子(懒:),主要是以后进一步改进),当然也没有画图标,也是为了以后改进,这只是一个初步的形态,大家看看有什么更高的方法?!
- 最新文章
- 利用UltraEdit快速将SQL语句转换为符合VB.NET..[05-23]
- 在VS2005中调试WindowsService[05-23]
- Visual Basic和C#中的LINQ聚合[05-23]
- Visual Basic.Net基础概念和语法[05-23]
- Visual Basic 9.0隐式类型的局部变量[05-23]
- 关于Visual Basic 9.0动态接口[05-23]
- 相关文章
- 利用UltraEdit快速将SQL语句转换为符合VB.NET..[05-23]
- 怎样在VB.NET中实现窗体控件数据集绑定[05-23]
- VB.NET下的事件和委托[05-23]
- ADO.Net学习笔记——DataAdapter更新数据库记..[05-23]
- 关于 VB.NET 的 My 功能[05-23]
- vb.net 开发中使用excel 插件学习方法及代码[05-23]
