2011-05-15 75 views

回答

4

視覺樣式是形成操作系統主題的顏色,字體和其他視覺元素。如果控件和操作系統支持,控件將使用視覺樣式進行繪製。爲了產生效果,必須在應用程序中創建任何控件之前調用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)返回false,EnableVisualStyles絕對沒有效果,所以稱它或不是沒有區別。

+0

是的,但有問題的終端服務器將可能有OS主題關閉(它會用「經典」的樣子),以節約資源。因此,如果調用Application.EnableVisualStyles()將會在此設置中發揮任何作用,那麼我的問題就是性能。對於在終端服務之外運行應用程序的客戶,我將調用EnableVisualStyles()。 – Eyvind 2011-05-15 10:59:42

+0

沒有Application.EnableVisualStyles()如果OS主題服務和主題支持是如此調用EnableVisualStyles與否將在所有(視覺效果既表現明智的,也沒有)沒有影響,如果主題是已經關閉纔會有效。 – 2011-05-15 11:03:51

相關問題