ハイ コントラスト モード

プラットフォーム

クライアント - 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 の色の仕様では、特定の色ではなくシステム メトリックを使用するための構文を指定します
    • ハイ コントラスト メディア クエリのサポートがインターネット エクスプローラー 10 に追加されています
    • WWA は IAccessibilityCapabilities::get_HighContrast() メソッドを利用して、ハイ コントラストの状態をチェックできます

    Windows ストア アプリには、従来の Windows アプリケーションに存在するテーマ パーツに関する同じ問題はあまりありませんが、ハイ コントラストのコンプライアンスを確保する必要があります。 既定では、インターネット エクスプローラーは特定のユーザー定義スタイルを無視し、ハイ コントラスト準拠の値に置き換えます。 たとえば、背景画像、背景、色の CSS プロパティは無視されます。

    インターネット エクスプローラーが設定したプロパティを無視しないようにし、UI がハイ コントラストに準拠していることを確認した場合は、親要素で新しい M3 CSS プロパティ –ms-high-contrast: off を設定できます。

  • ハイ コントラスト Windows ストア アプリの作成:

    Windows ストア アプリでは、 SystemColors.WindowColor や SystemColors.WindowTextColor など、特定のシステム メトリックの色が組み合わせて使用されるように設計されていることに留意して、適切な UI 要素の色分けを決定するために SystemColors クラスを使用する必要があります。 これにより、優れたハイ コントラスト エクスペリエンスが容易になります。

  • 以前のバージョンの Windows でハイ コントラストを適切に検出する:

    以前のバージョンの Windows で実行されているアプリは、マニフェストで問題の Windows のバージョンとの互換性が指定されている場合でも、新しいハイ コントラスト テーマにアクセスできません。 そのため、以前のバージョンの Windows で使用されていたクラシック環境でのレンダリングを処理するために、追加のコード パスを挿入することが必要になる場合があります。 この場合は、SPI_GETHIGHCONTRAST フラグを使用して SystemParametersInfo 関数を呼び出して、ハイ コントラストの有無を確認する必要があります。 これは、ハイ コントラストの存在を確認する唯一のサポートされている方法です。

テスト

アプリのテスト中に、Windows 8によって提供されるすべてのインボックス テーマ (Aero、Basic、High Contrast 1、High Contrast 2、ハイ コントラスト ブラック、ハイ コントラスト ホワイト) で正しくレンダリングされていることを確認します。 ハイ コントラスト テーマでテキストが明確に表示され、読みやすくなっていることを確認します。

リソース