65.9K
CodeProject 正在变化。 阅读更多。
Home

带图标的菜单项_圆形按钮

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.40/5 (5投票s)

2007年9月4日

2分钟阅读

viewsIcon

26200

downloadIcon

354

创建带图标的菜单项_创建圆形按钮。

Screenshot - Demo_image.jpg

引言

在 VS.NET 的工具箱中使用 C# 创建窗体时,无法创建带有图标的菜单项,即使这确实很有必要。我研究并开发了这个应用程序来解决这个问题。

使用带有图标的圆形按钮菜单项,您可以创建具有吸引力的菜单项,因此,我使用绘图创建了自定义按钮。

背景

VS.NET 2003

使用代码

<code>

protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);
Brush br; // 用于绘制矩形

Rectangle rcBk = e.Bounds;
// 添加图标图像的宽度
rcBk.X -= m_Icon.Width;
rcBk.Width += m_Icon.Width;

// 当菜单项启用时
if((e.State & DrawItemState.Selected) != 0 && this.Enabled == true)
{ // 当被选中(高亮显示)时
float f = 0;
br = new LinearGradientBrush(rcBk, m_Gradient_Color1, m_Gradient_Color2, f);
// 绘制主矩形
e.Graphics.FillRectangle(br, rcBk);

// 绘制主矩形的边框
Pen pen = new Pen(new SolidBrush(SystemColors.Highlight));
e.Graphics.DrawRectangle(pen, e.Bounds.Left, e.Bounds.Top, rcBk.Width - 17, rcBk.Height-1);
}
else // 当未被选中时
{
// 绘制主矩形
br = new SolidBrush( SystemColors.Menu ) ;
e.Graphics.FillRectangle(br, rcBk);
// 绘制图标背景矩形
br = new SolidBrush( SystemColors.Control ) ;
e.Graphics.FillRectangle(br, e.Bounds.Left, e.Bounds.Top, m_Icon.Width + 6, m_Icon.Height + 6);
}

// 绘制图标在主矩形前面
if(m_Icon != null)
{
e.Graphics.DrawIcon(m_Icon, e.Bounds.Left + 2, e.Bounds.Top + 3);
}
StringFormat sf = new StringFormat();
sf.HotkeyPrefix = HotkeyPrefix.Show;

// 设置文本颜色
if ( this.Enabled == false ) // 当菜单项未启用时
{
br = new SolidBrush( SystemColors.GrayText ) ;
}
else
{
br = new SolidBrush( SystemColors.WindowText ) ;
// br = new SolidBrush(e.ForeColor);
}

// 绘制文本
e.Graphics.DrawString(GetRealText(), m_Font, br, e.Bounds.Left + 25, e.Bounds.Top + 2, sf);
}

</code>

关注点

没问题

历史

这是第一个版本

© . All rights reserved.