我应该在终端服务上调用Application.EnableVisualStyles()吗?

时间:2011-05-15 10:40:36

标签: c# .net winforms citrix terminal-services

在终端服务/ Citrix环境中,我应该拨打电话吗? 我的程序中,在我的.NET 3.5 WinForms应用程序中Application.EnableVisualStyles() 开始?或者,最好不要这样做吗?

我正在寻找能够提供最佳性能的选项,并且不需要使用任何控件 主题。

1 个答案:

答案 0 :(得分:4)

  

视觉样式是形成操作系统主题的颜色,字体和其他可视元素。如果控件和操作系统支持,控件将使用视觉样式绘制。要产生效果,必须在创建应用程序中的任何控件之前调用EnableVisualStyles();通常,EnableVisualStyles()是Main函数中的第一行。

因此,如果您需要让您的应用程序与当前的操作系统主题保持一致,则需要调用它。如果经典的Windows外观足够你,你可以跳过这个。我个人从不为我的服务器专用应用程序(如控制面板等)启用视觉样式。

下面是一个没有启用视觉样式的配置工具。这样很好找我,所以EnableVisualStyles被忽略了:

enter image description here

使用反射器快速查看Application.EnableVisualStyles()方法,在方法EnableVisualStyles -> EnableVisualStylesInternal -> CreateActivationContext中显示以下代码:

if (!contextCreationSucceeded && OSFeature.Feature.IsPresent(OSFeature.Themes))
    {
      enableThemingActivationContext = new ACTCTX();
      enableThemingActivationContext.cbSize = Marshal.SizeOf(typeof(ACTCTX));
      enableThemingActivationContext.lpSource = dllPath;
      enableThemingActivationContext.lpResourceName = (IntPtr) nativeResourceManifestID;
      enableThemingActivationContext.dwFlags = 8;
      hActCtx = CreateActCtx(ref enableThemingActivationContext);
      contextCreationSucceeded = hActCtx != new IntPtr(-1);
    }

如果OSFeature.Feature.IsPresent(OSFeature.Themes)返回false,则EnableVisualStyles完全没有效果,因此调用它或不会产生任何影响。