Windows XP 功能和 Windows 窗体控件

Microsoft® Windows® XP 有一些在您创建 Windows 窗体时可以利用的新功能:

  • 用户界面 (UI) 的新外观和新行为

  • ListView 控件的新视图

  • 快速用户切换功能

Windows XP 中的用户界面更改

Windows XP 的发布为 Windows 用户界面引入了新的外观和行为。 Windows XP 用户界面由包含在 Visual Studio .NET 中的相同功能控件组成,在外观上有所更新。 Windows XP 改进方面的两个示例是当鼠标放在带圆弧拐角的控件上时控件颜色变亮,以及彩色的 ProgressBar 控件。

当“视觉样式”打开时示例窗体和控件在 Windows XP 中的外观

WinXPConAfter 屏幕快照

提示

本主题所述的功能只适用于 Windows XP 操作系统上运行的应用程序。 当在其他平台上运行时,控件将保持经典用户界面外观,任何与视觉样式有关的代码都将不起作用。

相比之下,Visual Studio 开发人员可用的控件不共享此外观,即使它们是相同的控件也是如此。

使用 Visual Studio 创建的示例窗体和控件的默认外观

WinXPConBefore 屏幕快照

可以将窗体看作具有两个不同的部分:工作区和非工作区。 在 Windows XP 操作系统上运行的所有应用程序都有非工作区,它包括窗口框架、标题栏和非工作滚动条。 操作系统默认将视觉样式应用于非工作区,因此当 Windows 窗体在 Windows XP 上运行时,您将看到更新的标题栏和滚动条。 本主题描述如何更改工作区。

视觉样式

视觉样式是应用程序或操作系统的用户界面的用户可修改外观。 如前所述,当在 Windows XP 上运行时,窗体的滚动条和标题栏将立即更改;如果应用程序调用 EnableVisualStyles 方法,当在 Windows XP 上运行时,大多数 Windows 窗体控件都将自动采用视觉样式。 有关更多信息,请参见如何:启用 Windows XP 视觉样式

有几个 Windows 窗体控件在所有操作系统上的外观都一样;实现 EnableVisualStyles 对这些控件没有影响。 这些控件包括 LabelLinkLabelDomainUpDownNumericUpDownCheckedListBox

Windows XP ListView 样式

除了用户界面的新外观以外,Windows XP 还为 ListView 控件引入了两种新样式,如 Windows 资源管理器的右侧窗格所示。

  • 分组视图

  • 平铺视图

通过 Windows XP 中 ListView 控件的分组功能,可以将逻辑上相关的项组以可视的方式排列在一起。 这些组在屏幕上通过包含标题的水平组标头分隔。

在比 Windows XP 早的平台上,这些组不会显示。 所有项都将如平常一样显示。 有关更多信息,请参见 如何:对 Windows 窗体 ListView 控件中的项进行分组

插入标记为用户显示了拖动项的放置位置。 当 ListView 控件的 AutoArrange 属性设置为“false”时,将显示插入标记。 如果用户将某项拖至其他两项之间的某点处,插入标记将会显示该项新的预期位置。

在比 Windows XP 早的平台上,插入标记将不会显示,对插入标记属性和方法的调用也将不起作用。 有关更多信息,请参见 如何:在 Windows 窗体 ListView 控件中显示插入标记

使用 ListView 控件的平铺视图功能,可以在图形与文本信息之间建立一种视觉平衡。 为平铺视图中的某项显示的文本信息与为详细信息视图定义的列信息相同。 在 ListView 控件中,平铺视图与分组功能或插入标记功能一同运行。 平铺视图使用 32 x 32 的图标和几行文本。

使用平铺视图的属性和方法,可以指定要为每项显示的列字段,还可以在平铺视图窗口中集中控制所有项的大小和外观。 为明晰起见,平铺视图中的第一行文本始终是项名。

在比 Windows XP 早的平台上,ListView 将显示在 LargeIcon 视图中。 有关更多信息,请参见 如何:在 Windows 窗体 ListView 控件中启用平铺视图

Windows XP 上的快速用户切换功能

Windows XP 引入了快速用户切换功能,它使多个用户可以共享一台计算机,并且无需关闭他们运行的程序就可以在不同用户会话之间切换。 .NET Framework 提供 SessionSwitch 事件,该事件在当前用户更改时发生。

提示

SessionSwitch 事件仅适用于 Windows XP,当在其他平台上运行时,SessionSwitch 事件处理程序中的代码将被忽略。

下面的代码演示如何在 SessionSwitch 事件中向日志写入数据:

Private Sub SessionSwitch(ByVal sender As System.Object, ByVal e As _
Microsoft.Win32.SessionSwitchEventArgs)
    If e.Reason = SessionSwitchReason.SessionLogon Then
        My.Computer.EventLogs.Application.WriteEntry( _
My.User.Username.ToString & " logged on at " & _
My.Computer.Clock.LocalTime.Now.ToString)
    ElseIf e.Reason = SessionSwitchReason.SessionLogoff Then
        My.Computer.EventLogs.Application.WriteEntry( _
My.User.Username.ToString & " logged off at " & _
My.Computer.Clock.LocalTime.Now.ToString)
    End If
End Sub
private void sessionSwitch(System.Object sender, _
Microsoft.Win32.SessionSwitchEventArgs e)
{
    if (e.Reason == SessionSwitchReason.SessionLogon)
        EventLog.WriteEntry("sessionSwitch", _
SystemInformation.UserName.ToString() + " logged on at " + _
DateTime.Now.TimeOfDay.ToString());
    else if (e.Reason == SessionSwitchReason.SessionLogoff)
        EventLog.WriteEntry("sessionSwitch", _
SystemInformation.UserName.ToString() + " logged off at " + _
DateTime.Now.TimeOfDay.ToString());
}

请参见

任务

如何:对 Windows 窗体 ListView 控件中的项进行分组

如何:在 Windows 窗体 ListView 控件中启用平铺视图

如何:在 Windows 窗体 ListView 控件中显示插入标记

参考

FlatStyle

SessionSwitch