3

ターミナル サービス/Citrix 環境では Application.EnableVisualStyles()、プログラムの開始時に .NET 3.5 WinForms アプリを呼び出す必要がありますか? それともやめたほうがいいのでしょうか?

最高のパフォーマンスを提供し、テーマで描画されたコントロールを必要としないオプションを探しています。

4

1 に答える 1

4

視覚スタイルは、オペレーティング システムのテーマを形成する色、フォント、およびその他の視覚要素です。コントロールとオペレーティング システムがそれをサポートしている場合、コントロールはビジュアル スタイルを使用して描画します。効果を得るには、アプリケーションでコントロールを作成する前に EnableVisualStyles() を呼び出す必要があります。通常、EnableVisualStyles() は Main 関数の最初の行です。

そのため、アプリケーションを現在の OS テーマに合わせて表示する必要がある場合は、これを呼び出す必要があります。従来の 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 に答える