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

发布于 2024-11-07 15:47:21 字数 166 浏览 5 评论 0原文

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

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

In a terminal services/citrix environment, should I call
Application.EnableVisualStyles() in my .NET 3.5 WinForms app when my program
starts? Or, is it better to refrain from doing that?

I am looking for the option that gives the best performance, and do not need any controls drawn with
themes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心奴独伤 2024-11-14 15:47:21

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

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

以下是未启用视觉样式的配置器工具。这样对我来说很好看,因此跳过了 EnableVisualStyles

在此处输入图像描述

快速查看进入 Application.EnableVisualStyles() 方法,反射器在方法 EnableVisualStyles -> 中显示下面的代码启用VisualStylesInternal -> 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绝对没有效果,因此调用与否没有什么区别。

Visual styles are the colors, fonts, and other visual elements that form an operating system theme. Controls will draw with visual styles if the control and the operating system support it. To have an effect, EnableVisualStyles() must be called before creating any controls in the application; typically, EnableVisualStyles() is the first line in the Main function.

So, if you need to have your application look in line with the current OS theme, you need to call this. If the classic Windows look is enough for you, you can skip this. I personally never enable visual styles for my server-only apps (like control panels, etc.).

Below is a configurator tool without the visual styles enabled. It's good looking for me this way so EnableVisualStyles was skipped:

enter image description here

A quick look into Application.EnableVisualStyles() method with reflector revealed below code in the method 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);
    }

If OSFeature.Feature.IsPresent(OSFeature.Themes) returns false, EnableVisualStyles has absolutely no effect so calling it or not makes no difference.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文