ハイ コントラスト モード

プラットフォーム

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

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

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

テスト

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

リソース