ハイ コントラスト モード
プラットフォーム
クライアント - Windows 8
サーバー - Windows Server 2012
形容
以前の Windows オペレーティング システムでは、ハイ コントラスト モードはクラシック テーマで実行されているテーマに限定されていましたが、これは視覚的なスタイルではありません。 Windows 8 および Windows Server 2012 では、クラシック モードが削除され、視覚的にスタイル設定されたハイ コントラスト テーマに置き換えられました。 この変更の主な利点の 1 つは、クラシック モードで実行されているアプリの別のコード パスを削除することです。
開発者は、ハイ コントラスト モードがアプリに与える影響と、本当にスタイルに依存しないアプリを開発する方法について、引き続き教育を受ける必要があります。 これは重要です。テーマの色を誤って使用したり、想定したりすると、Aero などのビジュアル スタイルでアプリが正しく動作する可能性がある一方で、同じアプリがハイ コントラストで正しく応答しないためです。 たとえば、Aero では、テキストは常に黒で、強調表示の色は水色です。 ただし、ハイ コントラストの黒では、強調表示の色は黒です。 Windows 8 より前の多くのインボックス アプリの場合と同様に黒いテキストを想定し、強調表示にシステムの既定値を使用すると、黒い背景に黒いテキストが表示されます。 このような状況では、スタイル間でアプリが正しく表示されるように、テーマとシステム メトリックを正しく使用する方法を理解する必要があります。
症状
- テーマは、Windows 8 <サポートされているOS> タグがアプリ マニフェストに含まれていないアプリのクライアント領域では有効になっていません。 そのため、アプリは、クラシック テーマのハイ コントラスト モードでレンダリングするために必要なコード パスを使用して、クライアント領域をレンダリングする必要があります。
- テーマは、ハイ コントラスト テーマのアプリのクライアント以外の領域とクライアント領域の両方では有効になっていません。 また、アプリ マニフェストに Windows 8 <サポートされているOS> タグが含まれていないアプリでは有効ではなく、DwnIsCompositionEnabled() API を使用してウィンドウの非クライアント領域に描画されます。 アプリ全体がクラシック テーマのハイ コントラスト モードでレンダリングされます。
- マニフェストに Windows 8 のサポートを追加するが、レンダリングにビジュアル スタイルを使用しないアプリ、つまりアプリ内の色や画像をハードコーディングするアプリは、ハイ コントラスト テーマでは正しくレンダリングされない可能性があります。 テキストの読み取りが困難な場合や、ハイ コントラスト モードの場合と同じように画像が表示されない場合があります。
緩和
ハイ コントラスト テーマのテキストの色は、Microsoft アクセシビリティ ガイドラインに準拠するように作成されています。 前景と背景の間で 14:1 のハイ コントラスト比を維持します。 既定で有効になっている色が特定のエンド ユーザーに適していない場合は、ハイ コントラスト テーマの [ウィンドウの色] のコントロール パネル設定を使用して簡単にカスタマイズできます。
これらの UI コンポーネントは、ハイ コントラスト テーマでカスタマイズできます。
- ウィンドウの背景色
- テキストの色
- ハイパーリンクの色
- 無効なテキスト
- 選択したテキストの前景色と背景色
- アクティブ ウィンドウ タイトルの前景色と背景色
- 非アクティブなウィンドウ タイトルの前景色と背景色
- 前景色と背景色のボタン
解決
ハイ コントラスト テーマのアプリで予期しない動作が発生した場合、次のいずれかの解決策が役立つ可能性があります。
Windows 8 用アプリのマニフェスト:
アプリ マニフェストに Windows 8 <サポートされているOS> タグが含まれていないアプリでは、テーマなしでクライアント領域がレンダリングされます。 インボックス アプリはすべて、このエントリをアプリ マニフェストに含める必要があります。 Windows 8 の 4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38 GUID 値を追加します。
所有者描画 UI でビジュアル スタイルを使用する:
所有者描画コントロールは、MSDN の指示に従って、テキストを含むコントロールパーツと状態を正しくレンダリングする必要があります。 開発者は、非 UxTheme メソッドをレンダリングに使用するために、デバイス コンテキストで指定されたテキストまたは背景色に依存しないでください。 該当するコントロールのテーマ部分がない場合は、適切なメトリック GetThemeSysColor を使用し、標準の GDI メソッドを使用してテキストを描画します。 UxTheme 呼び出しが適切でない場合は、GetSysColor メソッドを使用して適切なメトリックを取得します。
テキストの色の選択:
ハードコーディングされたテキストの色は、すべての一般的なシナリオで問題なく表示されると見なされる場合でも使用しないでください。 出荷テーマは、関連するメトリックに対する高い可視性をサポートする方法で作成されます。 たとえば、COLOR_HIGHLIGHTTEXTはCOLOR_HIGHLIGHTを背景として使用し、COLOR_WINDOWTEXTはCOLOR_WINDOWを背景として使用することを意図しています。 これらの関連付けに例外がある場合は、コードではなくテーマパーツと状態定義で操作します。 ハイ コントラスト UI を設計するときは、ハイ コントラスト ユーザーが色をカスタマイズできるため、UI が現在適用されているハイ コントラスト テーマに依存しないようにすることが重要です。
WM_ThemeChange イベントに応答する :
アプリがテーマから取得した色をキャッシュするか、標準以外の方法で色を適用する場合は、保存されている色の値を再計算して UI を再描画するWM_THEMECHANGEのメッセージ ハンドラーを追加します。
ハイ コントラスト WWA アプリの作成:
Web アプリは UxTheme API にアクセスできませんが、UI の基礎として現在のシステム メトリックを使用して記述する必要があります。 WWA 開発者がハイ コントラスト準拠アプリを確保するために利用するリソースがいくつかあります。
- W3C CSS Color 仕様 では、特定の色ではなくシステム メトリックを使用するための構文を指定します
- ハイ コントラスト メディア クエリのサポートが Internet Explorer 10 に追加される
- WWA は IAccessibilityCapabilities::get_HighContrast() メソッドを利用してハイ コントラストの状態を確認できます
Windows ストア アプリには、従来の Windows アプリケーションに存在するテーマ パーツに関する同じ問題はあまりありませんが、引き続きハイ コントラストのコンプライアンスを確保する必要があります。 既定では、Internet Explorer は特定のユーザー定義スタイルを無視し、ハイ コントラスト準拠の値に置き換えます。 たとえば、背景画像、背景、色の CSS プロパティは無視されます。
設定したプロパティが Internet Explorer で無視されないようにし、UI がハイ コントラストに準拠していることを確認した場合は、親要素で新しい M3 CSS プロパティ (ms-high-contrast: off) を設定できます。
ハイ コントラスト Windows ストア アプリの作成:
Windows ストア アプリでは、適切な UI 要素の色分けを決定するために、SystemColors クラスを使用する必要があります。特定のシステム メトリックの色は、SystemColors.WindowColor や SystemColors.WindowTextColor などの組み合わせて使用するように設計されていることに注意してください。 これにより、優れたハイ コントラスト エクスペリエンスが容易になります。
以前のバージョンの Windows でハイ コントラストを正しく検出する:
以前のバージョンの Windows で実行されているアプリは、マニフェストで該当する Windows のバージョンとの互換性が指定されている場合でも、新しいハイ コントラスト テーマにアクセスできません。 そのため、以前のバージョンの Windows で使用されていたクラシック環境でのレンダリングを処理するために、追加のコード パスを挿入することが必要になる場合があります。 この場合は、SPI_GETHIGHCONTRAST フラグを使用して SystemParametersInfo 関数を呼び出して、ハイ コントラストの有無を確認する必要があります。 これは、ハイ コントラストの有無を確認する唯一の方法です。
テスト
アプリのテスト中に、Windows 8 で提供されるすべてのインボックス テーマ (Aero、Basic、High Contrast 1、High Contrast 2、High Contrast Black、High Contrast White) で正しくレンダリングされていることを確認します。 ハイ コントラスト テーマでテキストが明確に表示され、読みやすくなっていることを確認します。
リソース
- Aero スタイル クラス、パーツ、および状態 (新しい基本テーマとハイ コントラスト テーマでもこれらの状態が使用されます)
- すべてのビジュアル スタイルに共通する パーツと状態
- カスタム コントロールと Owner-Drawn コントロールでビジュアル スタイルを使用する
- GetSysColor 関数 を する
- W3C CSS カラー モジュール レベル 3
- SystemColors クラスの
- SystemParametersInfo 関数 を する
- Microsoft アクセシビリティ の