Должен ли я вызвать Application.EnableVisualStyles () для служб терминалов? - PullRequest
2 голосов
/ 15 мая 2011

В среде служб терминалов / citrix, следует ли мне вызывать Application.EnableVisualStyles() в моем приложении .NET 3.5 WinForms при запуске моей программы?Или лучше воздержаться от этого?

Я ищу вариант, который дает наилучшую производительность и не требует никаких элементов управления, нарисованных с темами.

1 Ответ

4 голосов
/ 15 мая 2011

Визуальные стили - это цвета, шрифты и другие визуальные элементы, которые формируют тему операционной системы.Элементы управления будут отображаться с визуальными стилями, если они поддерживаются элементом управления и операционной системой.Чтобы получить эффект, 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) возвращает ложь, EnableVisualStyles не имеет абсолютно никакого эффекта, поэтому вызывать его или нет не имеет значения.

...