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