支援高對比度主題
本主題比較 Windows 8 中高對比度主題的支持與舊版 Windows 的支援,並說明如何在 Windows 8 應用程式中支援高對比度主題。
其中包含下列各節。
高對比度主題支援概觀
Windows 7 和更早版本支援兩種主題模型,包括舊版 Windows 傳統模型和目前的可視化樣式。 Windows 傳統模型已透過 Windows 7 保留,主要是為了支援各種高對比度主題。 不過,Windows 傳統模型有許多缺點:
- 不支援使用視覺樣式的主題,例如 Windows Aero。 高對比度主題的用戶必須使用 Windows 傳統 UI。
- 不支援依賴桌面視窗管理員 (DWM) 執行的 UI 功能,例如縮圖預覽和 Windows 7 中引進的全螢幕放大鏡。
- 開發人員必須維護兩個不同的程式碼路徑,以支援兩個不同的主題模型。
在 Windows 8 和更新版本中,下列主題模型變更可解決先前的缺點:
- 不再支援 Windows 傳統主題模型,可讓開發人員只針對僅以 Windows 8 為目標的應用程式維護一個程式代碼路徑。
- 由於視覺樣式和 DWM 位於 Windows 8 中,高對比度使用者可以存取縮圖預覽和全螢幕放大鏡等功能。
- 可視化樣式支援設定各種UI元素的色彩,讓高對比度使用者自定義UI以因應個別需求和喜好設定。
- Windows 8 包含現有應用程式的相容性支援,這些應用程式的設計目的是根據 Windows 傳統主題模型使用高對比度主題。
支援 Windows 8 和更新版本中的高對比度主題
在 Windows 8 中,因為視覺樣式處於高對比度模式,因此只要您聽聽下列指導方針,支援高對比度主題就很簡單。
- 字型和控件大小。 若要確保您的UI可供身心障礙使用者使用,請根據目前的主題設定來設定字型大小。 將控件的大小設定為至少預設大小。
- 顏色。 避免使用硬式編碼色彩。 請改用系統色彩,因為它們是以目前的主題為基礎。 使用自訂色彩可能會干擾並覆寫高對比度主題中的色彩。
- 應用程式指令清單。 設計來使用新高對比度主題的應用程式應該在其指令清單中定義應用程式相容性區段,其中包含 Windows 8 相容性 GUID。 否則,Windows 會假設應用程式是針對舊版 Windows 所設計,並藉由模擬 Windows 傳統主題模型來轉譯應用程式 UI。
將相容性區段新增至您的應用程式指令清單
應用程式指令清單是一個 XML 檔案,描述應用程式的需求。 指令清單的相容性區段會識別應用程式支援的 Windows 版本。 下列 GUID 用於相容性區段中,以識別各種版本的 Windows。
版本 | GUID |
---|---|
Windows Vista | {e2011457-1546-43c5-a5fe-008deee3d3f0} |
Windows 7 | {35138b9a-5d96-4fbd-8e2d-a2440225f93a} |
Windows 8 | {4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38} |
相容性區段可以指定多個版本的 Windows,但每個版本都必須包含在它自己的 <supportedOS/>
標籤內。 下列範例顯示應用程式指令清單,指定兼容性區段中的 Windows 7 和 Windows 8:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!--The ID below indicates application support for Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!--The ID below indicates application support for Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
</application>
</compatibility>
</assembly>
如果應用程式沒有相容性指令清單,則會假設它是 Windows Vista 應用程式,而且當高對比度主題作用中時,不會在工作區中使用主題控件。 此外,某些可視化樣式函式的行為也會受到影響。 例如,IsThemeActive、IsCompositionActive 和 IsAppThemed 會傳回 FALSE,而 OpenThemeData 和 OpenThemeDataEx 則傳回 NULL 句柄。 這是為了提供相容性支援,因此在 Windows 8 之前建置的應用程式仍然可以以與舊版 Windows 的高對比度模式相同的外觀呈現其 UI,其中無法使用可視化樣式。
在 Windows 8 上,應用程式仍會收到桌面組合的優點。 例如,這表示全螢幕放大鏡等可用性應用程式不取決於個別應用程式指令清單的狀態。 可用性應用程式會繼續以高對比度模式運作,且應用程式在其指令清單中無法將其識別為 Windows 8 相容。
下列影像顯示 Windows 7 上高對比度的簡單對話方塊。
下圖顯示 Windows 8 上高對比度的相同對話方塊,但應用程式指令清單中指定的 Windows 7 相容性:
下圖顯示 Windows 8 上高對比度的相同對話方塊,並在應用程式指令清單中指定 Windows 8:
偵測舊版 Windows 中的高對比度
在舊版 Windows 上執行的應用程式無法存取新的高對比度主題。 如果您的應用程式需要在舊版 上執行,您應該在 Windows 傳統主題模型中包含在高對比度轉譯 UI 的支援。 您的應用程式可以使用 SPI_GETHIGHCONTRAST 旗標呼叫 SystemParametersInfo 函式,以判斷高對比度主題是否為使用中。
相關主題