让你的应用程序支持高对比度模式
??? 常看我的blog的網友可能都比較熟悉我使用的Windows主題,就是那個黑白高對比(HighContrast)了,這個主題雖然不是很popular,但還是有其根源的,應用程序支持HighContrast是屬于"創建具有輔助功能的 Windows 應用程序"的范疇的一個case。
??? 創建具有輔助功能的應用程序有重要的商業意義。許多政府都有針對軟件購買的輔助功能法規。“Certified for Windows”徽標包括輔助功能要求。據估計僅美國就有三千萬居民(其中許多是潛在的客戶)受到軟件輔助功能的影響。----msdn
??? 高對比度模式是一種 Windows 系統設置主題,它通過使用對比鮮明的色彩和字體大小提高文本的可讀性。這個色彩配置既然屬于Windows的一個輔助功能,原意是為了保證視力受損用戶查看信息預置的選項。可是對于程序員或者每天工作都是面對電腦的用戶,這個設置也有保護視力的作用,特別是程序員需要長時間專著的注視屏幕。Windows普通色彩主題,屏幕上的高亮色彩區域一般在60-70%。大家都知道普通CRT顯示器是靠電子激活熒光物質發光,屏幕越亮,射到屏幕上的電子束強度越大,而黑色的區域是沒有電子激活的地方。高亮對于屏幕刷新率要求也高,如果顯示器刷新率在85Hz以下,其實對眼睛傷害很大的,如果在75Hz及以下,明顯能感覺閃爍。而75Hz的刷新率在HighContrast模式下,是感覺不到屏幕閃爍的。
??? 如果我們要在我們的程序中支持HighContrast,我們可以通過Windows API SystemParametersInfo來讀出并判斷系統的顏色主題是否為黑白高度比度。在.NET下就更容易了,有個專門的bool System.Windows.Forms.SystemInfo.HighContrast屬性用來判斷系統的色彩主題。如果我們啟用了黑白高對比(即SystemInformation.HighContrast 為 true),則應用程序應當需要注意以下幾個方面的問題:
- 使用系統配色方案顯示所有用戶界面元素
- 用可視提示或聲音傳遞任何通過顏色傳遞的信息。例如,如果特定列表項用紅色字體突出顯示,則可以將字體改為粗體,這樣用戶就得到一種有關突出顯示項目的非顏色提示。
- 忽略文本后面的任何圖像或圖案
??? 應用程序應當在啟動時檢查 HighContrast 的設置并響應系統事件 UserPreferenceChanged。每當 HighContrast 的值更改時,就引發 UserPreferenceChanged 事件。SystemColors 類用來將標簽的顏色設置更改為用戶選定的系統顏色。
????在WinForm程序中有效的啟用高對比模式,我們需要以下步驟:
????1、創建一個方法以將Label的顏色設置為系統顏色。??
{
???if?(SystemInformation.HighContrast)
???{
??????companyLabel.BackColor?=?SystemColors.Window;
??????companyLabel.ForeColor?=?SystemColors.WindowText;
???}
???else
???{
??????companyLabel.BackColor?=?Color.Blue;
??????companyLabel.ForeColor?=?Color.Yellow;
???}
}
??? 2、在窗體構造函數中為 public class Form1中調用 SetColorScheme 過程。
public?Form1()
{
???InitializeComponent();
???SetColorScheme();
}
??? 3、使用適當的簽名創建一個事件過程,以響應 UserPreferenceChanged 事件。
public?void?UserPreferenceChanged(object?sender,?
Microsoft.Win32.UserPreferenceChangedEventArgs?e)
{
???SetColorScheme();
}
??? 4、在窗體構造函數中對InitializeComponents的調用后面添加代碼,以便將事件過程掛鉤到系統事件上。此方法調用 SetColorScheme 過程。 public?Form1()
{
???InitializeComponent();
???SetColorScheme();
???Microsoft.Win32.SystemEvents.UserPreferenceChanged?
??????+=?new?Microsoft.Win32.UserPreferenceChangedEventHandler(
??????this.UserPreferenceChanged);
}
??? 5、在調用基類的 Dispose 方法之前,向窗體的 Dispose 方法添加代碼,以在關閉應用程序時釋放事件。 protected?override?void?Dispose(?bool?disposing?)
{
???if(?disposing?)
???{
??????if?(components?!=?null)?
??????{
?????????components.Dispose();
??????}
???}
???Microsoft.Win32.SystemEvents.UserPreferenceChanged?
??????-=?new?Microsoft.Win32.UserPreferenceChangedEventHandler(
??????this.UserPreferenceChanged);
???base.Dispose(?disposing?);
} ??? 注意?? 系統事件代碼運行一個獨立于主應用程序的線程。如果不釋放事件,則即使程序關閉后掛接到該事件上的代碼也將運行。
??? 同樣我們的WebApplication也是可以支持Windows的配色方案,在適當的時候根據Windows的主題配置同時變化。
??? 下面是Web中的system color table,分別是HighContrast Style、Classtical Style和WindowXp Style,以供對比參考:
總結
以上是生活随笔為你收集整理的让你的应用程序支持高对比度模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Epox 8RDA3G主板奇怪的问题
- 下一篇: 终于通过了。