工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VB > 正文
Visual Basic创建“五星”级控件
[文章信息]
作者:
时间:2005-04-01
出处:MSDN
责任编辑:方舟
[文章导读]
本文的目标是 Windows MediaPlayer 中酷炫的“五星”级控件
advertisement
专题教程宝典
【软件应用】
【办公软件】
【图形图像】
【网页制作】
【操作系统】
【网络安全】
【程序开发】
【日报周刊】
【多媒体教程】
· 天极软件应用多媒体教程
· 修改设置 打造安全的个人电脑
· QQ2005beta1十大媒体联合发布
· 电脑美术设计中的色彩表现
· MFC程序员的WTL开发指南
· 多媒体系列教程:网页设计制作
· Win XP系统应用技巧完全手册
· 3Ds max7多边形建模从入门到进阶
· 微软对.NET失去信心?.NET专家激起千层浪
· Outlook Express使用技巧大全(一)
[正文]

1 2 3  下一页

  本文的目标是 Windows MediaPlayer 中酷炫的“五星”级控件(参见 图 1)。


图 1“五星”级控件

  该控件看起来非常棒,并且提供了一种很好的图形化查看等级的方法,但根据编辑经验,我发现它特别酷。当鼠标悬停在该栏上时,Windows Media Player 突出显示其中的星来显示您当前浮于其上的栏的值,从而提供了一种很好的图形反馈。在各种 Web 站点(包括 Netflix 和 Amazon)中,您可以发现相同类型的用户界面,并且我想在自己的应用程序中拥有这种功能,因此,我决定创建我自己的控件。我将使用 Windows 窗体控件来模拟这种用户界面元素,同时尝试使它具有足够的自定义能力,以便将其用于各种环境。

  入门

  第一个步骤是创建一个新的类库项目来容纳控件和空的 Windows 应用程序,以作为测试项目。尽管 Windows 控件库项目模板似乎更为合适,并且它可以很好地进行工作,但是在默认情况下,该项目包括用户控件(用户控件一般用于复合控件 ─ 包含一个或多个控件的 Windows 窗体控件),而我需要的只是一个空的类文件。下一步,您必须使当前的、新的空类从 System.Windows.Forms.Control 中继承,这只需在类声明后添加一个单行就可以实现:

Public Class Ratings
Inherits System.Windows.Forms.Control End Class

  如果您尝试只使用 IntelliSense? 添加 Inherits 语句,将会遇到一个小问题:使用类库模板来启动您的项目并不会添加对 System.Windows.Forms 程序集的引用,因此,您需要手动添加。此时,可先添加一个对 System.Drawing.dll 的引用,因为最后需要使用自定义绘图控件。 从现在起,我一般遵循以下几个步骤来进行所有的控件开发:

  1.为自定义绘图控件添加标准构造函数,设置该控件所需的所有控件样式,以便正确地绘图并尽可能使其平滑。

Public Sub New()
 Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)
 Me.SetStyle(ControlStyles.DoubleBuffer, True)
 Me.SetStyle(ControlStyles.ResizeRedraw, True)
 Me.SetStyle(ControlStyles.UserPaint, True)
 ... 'add any additional initialization code here
End Sub

  2.用纸记下配置控件行为和外观可能需要的公共属性清单。

  3.将所有这些属性添加为私有成员变量(我喜欢使用匈牙利表示法在每个变量前面添加前缀“m_”来表示内部变量),并包括适当的默认值,如下 所示。

Private m_FilledImage As Image
Private m_EmptyImage As Image
Private m_HoverImage As Image
Private m_ImageCount As Integer = 5
Private m_TopMargin As Integer = 2
Private m_LeftMargin As Integer = 4
Private m_BottomMargin As Integer = 2
Private m_RightMargin As Integer = 4
Private m_ImageSpacing As Integer = 8
Private m_ImageToDraw As Integer = 1

Private m_SelectedColor As Color = Color.Empty
Private m_HoverColor As Color = Color.Empty
Private m_EmptyColor As Color = Color.Empty
Private m_OutlineColor As Color = Color.Empty

Private m_selectedItem As Integer = 3
Private m_hoverItem As Integer = 1
Private m_hovering As Boolean = False

Private ItemAreas() As Rectangle


  4.将这些变量放入属性过程,虽然其中大部分过程相当简单(获取值,设置值),但是其中有些过程将需要一些附加代码,稍后我将进行讨论。

  5.开始设计和编写自定义绘图代码。

  6.最后,添加新的事件,如单击处理或该特定控件所需的特定事件。

  带有特定默认值的属性例程

  我想要一些自己的属性

   ─ 处理颜色的那些属性

   ─ 反映有关控件的其他属性的默认值(如 ForeColor)以及反映用户系统颜色的其他值。例如,让我们只使用其中的一种颜色 HoverColor 来查看可生成默认值的不同方法。

  第一种方法是显而易见的,只需在变量声明(或者构造函数)中设置默认值:

Private m_HoverColor As Color = _
Color.FromKnownColor(KnownColor.Highlight)

  在多数情况下,这就可以很好地进行工作,但是它存在两个问题。第一个问题是,如果用户在该应用程序运行时更改他们的系统颜色,该怎么办?在重新启动该程序后,该控件将反映正确的颜色,但是当时不会。第二个问题是,如果用户要以编程方式将颜色设置为默认颜色,该怎么办?没有实用方法可以清除颜色设置并将其设置为适当的系统颜色。用户自然会正确地将其设置为适当的系统颜色,但是随后又会再次回到第一个问题。 另外一种方法是在用户系统颜色发生更改时设置陷阱,并相应地更改您的属性值:

Protected Overrides Sub OnSystemColorsChanged( _
ByVal e As System.EventArgs)
 Me.HoverColor = Color.FromKnownColor(KnownColor.Highlight)
 Me.Invalidate()
End Sub

  该解决方案并不会真正地解决问题,除非您有办法通过开发人员使用该控件了解该属性是否会设为默认值或设置为特定的颜色。跟踪该信息的系统开销可能不值得花费这么大的精力。作为替代,我决定使用默认的空值,并在属性例程自身中返回适当的默认值,如下 所示。 这样,就解决了到目前为止我所提出的问题,包括系统颜色更改的处理;了解它何时会返回默认值与用户何时对其进行设置;以及允许用户重新将该值设置为默认值(在 myControl.HoverControl = Color.Empty 时)。

Public Property HoverColor() As Color
 Get
  If m_HoverColor.Equals(Color.Empty) Then
   Return Color.FromKnownColor(KnownColor.Highlight)
  Else
   Return m_HoverColor
  End If
 End Get
 Set(ByVal Value As Color)
  If Not Value.Equals(m_HoverColor) Then
   m_HoverColor = Value
   Me.Invalidate()
  End If
 End Set
End Property



1 2 3  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
相关内容焦点新闻
  • 让Visual Basic应用程序支持鼠标滚轮
  • 将个性化进行到底 VB中打造个性进度条
  • 在VB中通过相对路径引用标准DLL
  • 让你的VB程序支持多国语言的切换
  • 用Visual Basic学做“黑客”程序
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 【315】华硕笔记本电脑漏电 存在设计缺陷
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • Advertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价