首页 > 编程 > .NET > 正文

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

2024-07-10 13:08:04
字体:
来源:转载
供稿:网友
自己做出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;
}
}
说明:这里我没有画按钮按下时的样子(懒:),主要是以后进一步改进),当然也没有画图标,也是为了以后改进,这只是一个初步的形态,大家看看有什么更高的方法?!






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