Windows XP Tablet Ed.Objective C文本Visual Basic 9 (2008)Visual Basic 8 (2005)Windows VistaWindows 2003Visual Studio 2008.NET 3.0Visual Studio 2005Windows 2000设计/图形Windows XP.NET 2.0XML.NET 3.5C# 2.0C# 3.0开发Visual StudioWindowsC++.NETVisual BasicC#
使用 GDI+ 创建玻璃按钮






4.86/5 (208投票s)
如何仅使用 GDI+(而非 WPF)
屏幕截图
使用带有图像的标准玻璃按钮的示例应用程序。
相同的应用程序,但这次它有一个自定义的玻璃按钮。
托管四个玻璃按钮的 MFC 应用程序。
引言
我打赌你已经见过 Windows Vista 中的动画任务按钮了。我见过。我一直在想如何创建一个类似的控件。幸运的是,我找到了一个网页,其中介绍了如何使用 Microsoft Expression Blend (创建玻璃按钮:完整教程) 来做到这一点。使用 Microsoft Expression Blend 创建的玻璃按钮(以及整个应用程序)需要 .NET Framework 3.0 才能运行。由于有些人现在还不能或不想使用 .NET Framework 3.0,我决定使用 GDI+ 重写那个很酷的控件,以便它能够与 .NET Framework 2.0 一起工作。
将 XAML “转换”为 C# (GDI+)
上面提到的网页上的教程很容易完成,生成的 XAML 代码非常易于理解,因此在“转换”过程中没有遇到大的问题。
例如,我翻译了以下代码
<Border HorizontalAlignment="Stretch"
Margin="0,0,0,0" x:Name="shine"
Width="Auto" CornerRadius="4,4,0,0">
<Border.Background>
<LinearGradientBrush EndPoint="0.494,0.889"
StartPoint="0.494,0.028">
<GradientStop Color="#99FFFFFF" Offset="0" />
<GradientStop Color="#33FFFFFF" Offset="1" />
</LinearGradientBrush>
</Border.Background>
</Border>
into
using (GraphicsPath bh = CreateTopRoundRectangle(rect2, 4))
{
int opacity = 0x99;
if (isPressed) opacity = (int)(.4f * opacity + .5f);
using (Brush br = new LinearGradientBrush(rect2,
Color.FromArgb(opacity, shineColor),
Color.FromArgb(opacity / 3, shineColor),
LinearGradientMode.Vertical))
{
g.FillPath(br, bh);
}
}
(这只是 DrawButtonBackground
方法的一部分。)
即使是悬停按钮的动画也通过使用 Timer
类轻松实现。不幸的是,当玻璃按钮相当大时,动画不是很流畅。
如何使用 GlassButton 类?
GlassButton
类继承自 Button
类,因此可以使用相同的方式进行使用。现在也支持在玻璃按钮上显示图像。甚至在 Visual Studio 的窗体设计器中,指南线也能正常工作。
历史
- 1.3.2 (2008.11.02) — 重要! 这是该控件最后一个“独立”版本。下一个版本将包含在一个托管在 CodePlex 的新项目中。
- 修复了在某些情况下导致按钮图像被释放的错误
- 1.3.1 (27.10.2008)
- 源代码现在同时提供 C# 和 VB.NET 版本
- 修复了次要 bug
- 1.3 (19.11.2007)
- 当按钮禁用时,图像会变灰
- 添加了属性 '
FadeOnFocus
' - 提高了性能
- 修复了次要 bug
- 1.2 (31.03.2007)
- “禁用”外观与“启用”外观不同
- 添加了一些 '
PropertyChange
' 事件 - 提高了性能
- 将源代码与编译好的库和演示应用程序分开
- 添加了 MFC 演示应用程序
- 添加了工具箱位图
- 修复了次要 bug
- 1.1.1 (22.02.2007)
- 修复了次要 bug
- 1.1 (21.02.2007)
- 添加了图像支持
- 1.0 (19.02.2007)
- 第一版