首页 > 编程 > .NET > 正文

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

2024-07-10 13:08:36
字体:
来源:转载
供稿:网友

  自己做出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; 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表