ハイ コントラスト テーマのサポート

このトピックでは、Windows 8 でのハイ コントラスト テーマのサポートと以前のバージョンの Windows のサポートを比較し、Windows 8 アプリケーションでハイ コントラスト テーマをサポートする方法について説明します。

このトピックには次のセクションが含まれます。

ハイ コントラスト テーマのサポートの概要

Windows 7 以前では、従来の Windows クラシック モデルと現在のビジュアル スタイルなど、2 つのテーマ モデルがサポートされています。 Windows クラシック モデルは、さまざまなハイ コントラスト テーマをサポートするために主に Windows 7 を介して維持されます。 ただし、Windows クラシック モデルにはいくつかの欠点があります。

  • Windows Aero などのビジュアル スタイルを使用するテーマはサポートされません。 ハイ コントラスト テーマのユーザーは、Windows クラシック UI を使用する必要があります。
  • Windows 7 で導入されたサムネイル プレビューや全画面表示拡大鏡など、デスクトップ ウィンドウ マネージャー (DWM) を使用して実行する UI 機能はサポートされません。
  • 開発者は、2 つの異なるコード パスを維持して、2 つの異なるテーマ モデルをサポートする必要があります。

Windows 8 以降では、テーマ モデルに対する次の変更によって、以前の欠点に対処しています。

  • Windows クラシック テーマ モデルはサポートされなくなり、開発者は Windows 8 のみを対象とするアプリケーションのコード パスを 1 つだけ保持できます。
  • ビジュアル スタイルと 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 アプリケーションと見なされ、ハイ コントラスト テーマがアクティブな場合、クライアント領域でテーマ コントロールは使用されません。 また、一部のビジュアル スタイル関数の動作も影響を受けます。 たとえば、IsThemeActiveIsCompositionActiveIsAppThemed は、 FALSE を返す一方で、OpenThemeDataOpenThemeDataEx は、 NULL ハンドルを返します。 これは互換性のサポートを目的としているため、Windows 8 より前にビルドされたアプリケーションは、ビジュアル スタイルが使用できない以前のバージョンの Windows のハイ コントラスト モードと同じ外観で UI をレンダリングできます。

Windows 8 では、アプリケーションは引き続きデスクトップ コンポジションの利点を活用します。 つまり、たとえば、全画面表示拡大鏡などの利便性アプリケーションは、個々のアプリケーションのマニフェストの状態に依存しません。 利便性アプリケーションは、マニフェストで Windows 8 と互換性のあるものとして認識されないアプリケーションとハイ コントラスト モードで引き続き動作します。

次の図は、Windows 7 のハイ コントラストの単純なダイアログ ボックスを示しています。

hig contrast dialog box

この図は、Windows 8 では同じダイアログ ボックスをハイ コントラストで示していますが、Windows 7 の互換性はアプリケーション マニフェストで指定されています。

w8 high contrast dialog box

この図は、Windows 8 では同じダイアログ ボックスをハイ コントラストで示していますが、Windows 8 のアプリケーション マニフェストで指定されています。

w8 high contrast dialog with manifest

以前のバージョンの Windows でのハイ コントラストの検出

以前のバージョンの Windows で実行されているアプリケーションは、新しいハイ コントラスト テーマにアクセスできません。 アプリケーションを以前のバージョンで実行する必要がある場合は、Windows クラシック テーマ モデルで UI をハイ コントラストでレンダリングするためのサポートを含める必要があります。 アプリケーションは、SPI_GETHIGHCONTRAST フラグがある SystemParametersInfo 関数を呼び出すことによって、ハイ コントラスト テーマがアクティブかどうかを判断できます。

視覚スタイルを有効にする

ビジュアル スタイル