使用GDI+创建一个玻璃按钮

截图 示例应用程序使用一个带有图像的标准玻璃按钮。 相同的应用程序,但这次它有一个定制的玻璃按钮。 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代码非常容易理解,因此“转换”没有大问题。 例如,我翻译了以下代码: 隐藏,复制Code

<BorderHorizontalAlignment="Stretch"Margin="0,0,0,0"x:Name="shine"Width="Auto"CornerRadius="4,4,0,0">

  <Border.Background>
    <LinearGradientBrushEndPoint="0.494,0.889"StartPoint="0.494,0.028">
      <GradientStopColor="#99FFFFFF"Offset="0"/>

      <GradientStopColor="#33FFFFFF"Offset="1"/>
    </LinearGradientBrush>
  </Border.Background>

</Border>

成: 隐藏,复制Code

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(02.11.2008) -重要!这是该控件的最后一个“独立”版本。下一个版本将包含在CodePlex上的一个新项目中。 修正了一个错误,导致按钮的形象被处置在某些情况下 1.3.1 (27.10.2008) 源代码现在在c#和VB中都可以得到。修正了网络小bug 1.3 (19.11.2007) 添加属性“FadeOnFocus”改进了性能,修正了小错误 1.2 (31.03.2007) “禁用”的外观不同于“启用”一个增加了一些“PropertyChange”事件改进性能分裂源代码编译库和演示应用程序增加了MFC演示应用程序增加工具箱位图小错误修正 1.1.1 (22.02.2007) 小虫子固定 1.1 (21.02.2007) 添加图片的支持 1.0 (19.02.2007) 第一个版本 本文转载于:http://www.diyabc.com/frontweb/news505.html

posted @ 2020-08-07 08:45  Dincat  阅读(219)  评论(0编辑  收藏  举报