在软件开发的历史中,用户界面的风格随着操作系统的更新而不断演进。Visual Basic和Visual Studio .NET作为微软推出的编程工具,它们的界面风格也随着Windows操作系统的更新而发生了变化。本文将探讨这些变化,并介绍如何通过编程调整界面风格以适应操作系统的变化。
在Visual Basic5中,公共控件直接与它们的Shell对应物链接。随着Shell的更新,使用这些控件的VB应用程序的外观也会随之更新。然而,在Visual Basic 6中,这种行为发生了变化,它们不再使用Shell进行绘制。
有趣的是,历史在一定程度上重复了自身,尤其是在Visual Studio .NET中。如果在Windows Vista或更高版本上使用ListView或TreeView控件,会发现它们是按照“经典”Windows风格绘制的——选择高亮没有渐变效果,列分隔符(ListView)或交替的+/-符号(TreeView)也没有。
幸运的是,通过调用SetWindowTheme API,可以非常简单地启用这种风格。在示例应用程序中(可从上面的链接下载),创建了两个新的ListView和TreeView类,它们继承自System.Windows.Forms的对应类。
在每个类中,重写了OnHandleCreated方法,并检查正在运行的操作系统。如果在不支持的操作系统上调用SetWindowTheme,会导致崩溃。在这种情况下,检查的是Windows Vista或更高版本。
如果版本合适,就使用控件的句柄和shell风格的名称(在这种情况下是explorer)调用SetWindowTheme。就是这么简单——现在当运行应用程序时,控件将使用当前使用的shell风格进行绘制。
以下是TreeView控件的代码示例,展示了如何重写OnHandleCreated方法并调用SetWindowTheme API:
using System;
namespace ShellControlsExample
{
class TreeView : System.Windows.Forms.TreeView
{
protected override void OnHandleCreated(EventArgs e)
{
base.OnHandleCreated(e);
if (!this.DesignMode && Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 6)
{
NativeMethods.SetWindowTheme(this.Handle, "explorer", null);
}
}
}
}
对于TreeView控件,还建议将ShowLines属性设置为false,否则看起来会很奇怪。