我正在运行Windows Vista,并希望看起来像普通的Vista程序。关于如何构建Vista Style应用程序是否有任何非常好的教程/文章?我还想了解如何使用本机代码并将其转换为C#,例如this示例。
答案 0 :(得分:9)
如果您正在使用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 == Win.WM_CREATE) {
NativeMethods.SetWindowTheme(this.Handle, "Explorer", null);
}
base.WndProc(ref m);
}
}
默认ListView和我们的增强版之间的区别: ListView difference http://img100.imageshack.us/img100/1027/62586064nt6.png
不幸的是,每种控制都没有一种简单的方法。有些控件甚至没有任何WinForms包装器。最近我偶然发现了一个很好的汇编in this CodeProject article,值得一看。可能还有托管库可以打包它。
答案 1 :(得分:3)
如果你正在使用WPF,你可以使用微软的Vista Bridge library,它有几个有用的控件。否则,只需查看Windows UX Guidelines并自行滚动即可。 从该页面:
包含的一些功能 Vista Bridge示例库 - Vista风格的任务和文件对话框, 常用的打开和保存对话框, 应用恢复和重启, 已知文件夹,网络列表,电源 管理,用户帐户控制, CommandLink控件,Aero Wizard 控制,系统提供图标等。
此外,您可以查看 Aero.Controls 和 Aero.Wizard ,这是我编写的两个免费的开源WinForms包,为您提供一些标准控件和向导。
答案 2 :(得分:2)
如果您希望Windows XP的应用程序看起来像Vista一样100%,那么它将非常复杂,因为您需要覆盖Windows的绘制方式,以便您可以设计自己的兼容版本。
通常这些事情都是在Windows主题级别完成的,有时通过包含改变所有应用程序外观的特殊处理程序。 然后有tools like FastAero为所有Windows XP表单(source code available)添加透明度。
在任何情况下,如果您希望自己的应用看起来像Vista一样,则需要尊重Aero的Windows User Experience Interaction Guidelines。
您还可以使用WPF to fake the Aero-style of controls,以便您的应用在任何版本的Windows上看起来都相似。
答案 3 :(得分:1)
您可以查看第三方解决方案。
我们使用DevExpress在WinXP上实现风格迥异的WinForm应用程序,特别是他们的WinForms ribbon controls