3

在终端服务/citrix 环境中,我应该 Application.EnableVisualStyles()在程序启动时调用我的 .NET 3.5 WinForms 应用程序吗?或者,最好不要这样做?

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

4

1 回答 1

4

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

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

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

在此处输入图像描述

快速查看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则绝对没有效果,因此调用它与否没有区别。

于 2011-05-15T10:55:04.357 回答