在C#中制作Vista风格的应用程序

4

我正在使用Windows Vista,想让它的外观看起来像普通的Vista程序。有没有关于如何构建Vista风格应用程序的非常好的教程/文章?我还想学习如何使用本地代码并将其转换为C#,就像这个例子一样。


“Vista Style Apps” 是什么意思?你是指外观吗?那就是操作系统及其提供的新控件所完成的工作。 - Ed S.
是的,我指的是控件的外观。 - Kredns
4个回答

8
如果您正在使用WinForms,那么相对而言很容易实现,因为WinForms基于本地Win32控件。许多控件可以通过设置附加标志(通过向本地控件发送消息)或使用SetWindowTheme来增强其呈现方式。这可以通过Interop实现。
例如,以简单的ListView为例。如果您想要一个资源管理器风格的列表视图,则可以在ListView的公开句柄上使用SetWindowTheme。我们使用Interop来访问本地的SetWindowTheme()函数,挂钩ListView的窗口过程,并在创建控件时应用主题:
static class NativeMethods
{
    public const int WM_CREATE = 0x1;

    [DllImport("uxtheme.dll", CharSet = CharSet.Unicode)]
    public extern static int SetWindowTheme(
        IntPtr hWnd, string pszSubAppName, string pszSubIdList);
}

class ListView : System.Windows.Forms.ListView
{
    protected override void WndProc(ref Message m)
    {
        if (m.Msg == NativeMethods.WM_CREATE) {
            NativeMethods.SetWindowTheme(this.Handle, "Explorer", null);
        }
        base.WndProc(ref m);
    }
}

默认ListView和我们增强版之间的区别: ListView difference http://img100.imageshack.us/img100/1027/62586064nt6.png

不幸的是,并非每个控件都有一个简单的方法。有些控件甚至没有任何WinForms包装器。最近我偶然发现了一篇很好的编译在这篇CodeProject文章中,值得一看。可能还有一些托管库将其打包。


就我所知,这个技巧也可以为TreeView控件设置主题。 :) 据我所知,这是唯一通过此技巧进行主题设置的两个控件。 - Jonas

3
如果您使用的是WPF,您可以使用微软的Vista Bridge library,其中包含几个有用的控件。否则,只需查看Windows UX Guidelines并自己设计。 从那个页面中: 一些包括在Vista Bridge示例库中的功能是 - Vista样式任务和文件对话框, 常见的打开和保存对话框, 应用程序恢复和重新启动, 已知文件夹,网络列表,电源管理, 用户帐户控制,CommandLink控件,Aero向导 控件,系统提供的图标等。
此外,您还可以查看Aero.ControlsAero.Wizard,这是我编写的两个免费的开源WinForms包,分别为您提供了一些标准控件和向导。

这正是我想要的!谢谢你! :-) - Kredns
请注意,Bridge Library已更新为Windows 7,并更名为Windows API Code Pack:http://archive.msdn.microsoft.com/WindowsAPICodePack。它支持很多东西,但在我看来,对于添加到小型应用程序来说太大而且过于庞大了。 - Dave R.

2

如果您想让 Windows XP 的应用程序看起来与 Vista 一模一样,那么这将非常复杂,因为您需要覆盖绘制窗口的方式,以便设计出兼容的版本。

通常这些事情是在 Windows 主题级别上完成的,有时通过包含特殊处理程序来改变所有应用程序的外观。
然后有像 FastAero 这样的工具,它们会向所有 Windows XP 窗体添加透明度(源代码可用)。

无论如何,如果您想让您的应用程序看起来像 Vista,您需要遵循 Aero 的Windows 用户体验交互指南

您还可以使用WPF 来伪造控件的 Aero 样式,这样您的应用程序在任何版本的 Windows 上看起来都很相似。


1

您可以考虑使用第三方解决方案。

我们使用DevExpress来实现在WinXP上具有良好样式的WinForm应用程序,具体来说是他们的WinForms Ribbon Controls


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接