开发者

Should I call Application.EnableVisualStyles() on terminal services?

开发者 https://www.devze.com 2023-03-06 05:24 出处:网络
In a terminal services/citrix environment, should I call Application.EnableVisualStyles() in my .NET 3.5 WinForms app when my program

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.


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:

Should I call Application.EnableVisualStyles() on terminal services?

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消