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

このトピックでは、一般的なコントロールがユーザーの優先表示スタイルで表示されるようにアプリケーションを構成する方法について説明します。

このトピックのセクションは次のとおりです。

マニフェストまたはディレクティブを使用して、ビジュアル スタイルをアプリケーションに確実に適用できるようにする

アプリケーションでビジュアル スタイルを使用できるようにするには、バージョン 6 以降ComCtl32.dll使用する必要があります。 バージョン 6 は再頒布可能ではないため、アプリケーションを含むバージョンのWindowsでアプリケーションが実行されている場合にのみ使用できます。 Windowsには、バージョン 5 とバージョン 6 の両方が付属しています。 バージョン 6 ComCtl32.dllには、ユーザー コントロールと共通コントロールの両方が含まれています。 既定では、アプリケーションでは、User32.dllで定義されているユーザー コントロールと、ComCtl32.dll バージョン 5 で定義されている一般的なコントロールが使用されます。 DLL バージョンとその配布プラットフォームの一覧については、「 共通コントロール バージョン」を参照してください。

アプリケーションでビジュアル スタイルを使用する場合は、使用可能な場合はバージョン 6 ComCtl32.dll使用する必要があることを示すアプリケーション マニフェストまたはコンパイラ ディレクティブを追加する必要があります。

アプリケーション マニフェストを使用すると、アプリケーションで必要なアセンブリのバージョンを指定できます。 Microsoft Win32 では、アセンブリは DLL のセットと、それらの DLL 内に含まれるバージョン管理可能なオブジェクトの一覧です。

マニフェストは XML で記述されます。 アプリケーション マニフェスト ファイルの名前は、実行可能ファイルの名前とファイル名拡張子 .manifest です。たとえば、MyApp.exe.manifest です。 次のサンプル マニフェストは、最初のセクションでマニフェスト自体について説明していることを示しています。 次の表は、マニフェストの説明セクションの assemblyIdentity 要素によって設定された属性を示しています。

属性 説明
version マニフェストのバージョン。 バージョンは major.minor.revision.build (つまり、n.n.n.n、n <=65535) 形式である必要があります。
processorArchitecture アプリケーションが開発されるプロセッサ。
name 会社名、製品名、アプリケーション名が含まれます。
type Win32 など、アプリケーションの種類。

 

サンプル マニフェストでは、アプリケーションの説明も提供され、アプリケーションの依存関係を指定します。 次の表は、依存関係セクションの assemblyIdentity 要素によって設定された属性を示しています。

属性 説明
type Win32 などの依存関係コンポーネントの型。
name コンポーネント名。
version コンポーネントのバージョン。
processorArchitecture コンポーネントが設計されているプロセッサ。
publicKeyToken このコンポーネントで使用されるキー トークン。
language コンポーネントの言語。

 

マニフェスト ファイルの例を次に示します。

重要

アプリケーションが 32 ビット Windows プラットフォームをターゲットとする場合は processorArchitecture エントリを "X86" に、アプリケーションが 64 ビット Windows プラットフォームをターゲットとする場合は "amd64" に設定します。 次の例に示すように、すべてのプラットフォームが対象になるように "*" を指定することもできます。

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="CompanyName.ProductName.YourApplication"
    type="win32"
/>
<description>Your application description here.</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>

Microsoft Visual C++ 2005 以降を使用している場合は、マニフェストを手動で作成する代わりに、次のコンパイラ ディレクティブをソース コードに追加できます。 読みやすくするために、ディレクティブはここのいくつかの行に分割されています。

#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

次のトピックでは、さまざまな種類のアプリケーションにビジュアル スタイルを適用する手順について説明します。 マニフェストの形式はいずれの場合も同じであることに注意してください。

標準拡張機能のみを使用するアプリケーションでバージョン 6 ComCtl32.dll使用する

サードパーティの拡張機能を使用しないアプリケーションの例を次に示します。

  • 電卓
  • FreeCell (Windows Vista および Windows 7)
  • マインスイーパー (Windows Vista および Windows 7)
  • メモ帳
  • ソリティア (Windows Vista と Windows 7)

マニフェストを作成し、アプリケーションでビジュアル スタイルを使用できるようにするため。

  1. ComCtl32.lib にリンクし、 InitCommonControls を呼び出します。

  2. YourApp.exe.manifest という名前のファイルを、XML マニフェスト形式のソース ツリーに追加します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. 次のように、マニフェストをアプリケーションのリソース ファイルに追加します。

    CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
    

    Note

    前のエントリをリソースに追加する場合は、1 行で書式設定する必要があります。 または、XML マニフェスト ファイルをアプリケーションの実行可能ファイルと同じディレクトリに配置することもできます。 オペレーティング システムは、最初にファイル システムからマニフェストを読み込み、次に実行可能ファイルのリソース セクションを確認します。 ファイル システムのバージョンが優先されます。

     

アプリケーションをビルドすると、マニフェストがバイナリ リソースとして追加されます。

コントロール パネル または RunDll32.exe によって実行される DLL で ComCtl32 バージョン 6 を使用する

マニフェストを作成し、アプリケーションでビジュアル スタイルを使用できるようにするため。

  1. ComCtl32.lib にリンクし、 InitCommonControls を呼び出します。

  2. YourApp.cpl.manifest という名前のファイルを、XML マニフェスト形式のソース ツリーに追加します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  3. マニフェストをリソース ID 123 としてアプリケーションのリソース ファイルに追加します。

Note

コントロール パネル アプリケーションを作成するときは、適切なカテゴリに配置します。 コントロール パネルでは、コントロール パネル アプリケーションの分類がサポートされるようになりました。 つまり、コントロール パネルアプリケーションは識別子を割り当て、プログラムの追加と削除、外観とテーマ、日付、時刻、言語、地域オプションなどのタスク領域に分けることができます。

 

拡張機能、プラグイン、MMC スナップ、またはプロセスに取り込まれる DLL への Visual スタイル サポートの追加

ビジュアル スタイルのサポートは、拡張機能、プラグイン、MMC スナップイン、またはプロセスに取り込まれる DLL に追加できます。 たとえば、次の手順を使用して、Microsoft 管理コンソール (MMC) スナップインのビジュアル スタイルのサポートを追加します。

  1. DISOLATION_AWARE_ENABLED フラグを使用してスナップインをコンパイルするか、#include "windows.h" ステートメントの前に次のステートメントを挿入します。

    #define ISOLATION_AWARE_ENABLED 1
    

    ISOLATION_AWARE_ENABLEDの詳細については、「 コンポーネントの分離」を参照してください。

  2. スナップイン ソースに共通のコントロール ヘッダー ファイルを含めます。

    #include <commctrl.h>
    
  3. XML マニフェスト形式を使用する YourApp.manifest という名前のファイルをソース ツリーに追加します。

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <assemblyIdentity
        version="1.0.0.0"
        processorArchitecture="*"
        name="CompanyName.ProductName.YourApplication"
        type="win32"
    />
    <description>Your application description here.</description>
    <dependency>
        <dependentAssembly>
            <assemblyIdentity
                type="win32"
                name="Microsoft.Windows.Common-Controls"
                version="6.0.0.0"
                processorArchitecture="*"
                publicKeyToken="6595b64144ccf1df"
                language="*"
            />
        </dependentAssembly>
    </dependency>
    </assembly>
    
  4. マニフェストをスナップインのリソース ファイルに追加します。 リソース ファイルへのマニフェストの追加の詳細については、「 拡張機能、プラグイン、またはプロセスに取り込まれる DLL を使用するアプリケーションでの ComCtl32 バージョン 6 の使用 」を参照してください。

表示スタイルをオフにする

次のように SetWindowTheme 関数を呼び出すことで、コントロールまたはウィンドウ内のすべてのコントロールの表示スタイルをオフにすることができます。

SetWindowTheme(hwnd, L" ", L" ");

前の例では、 hwnd は、表示スタイルを無効にするウィンドウのハンドルです。 呼び出し後、コントロールは表示スタイルなしでレンダリングされます。

HTML コンテンツでの Visual スタイルの使用

背景や罫線などのカスケード スタイル シート (CSS) プロパティを変更する HTML ページには、ビジュアル スタイルが適用されません。 指定した CSS 属性が表示されます。 コンテンツの一部として指定すると、ほとんどの CSS プロパティは、ビジュアル スタイルが適用されている要素に適用されます。

既定では、Visual スタイルは、Microsoft Internet Explorer 6 以降のバージョンに表示されるページの組み込み HTML コントロールに適用されます。 HTML ページの表示スタイルをオフにするには、セクションに META タグを 追加します。 この手法は、HTML アプリケーション (HTA) としてパッケージ化されたコンテンツにも適用されます。 表示スタイルをオフにするには、META タグは次のようにする必要があります。

<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">

Note

ブラウザーの設定とタグの設定が一致しない場合、ページには表示スタイルは適用されません。 たとえば、META タグが "いいえ" に設定されていて、ブラウザーが表示スタイルを有効にするように設定されている場合、表示スタイルはページに適用されません。 ただし、ブラウザーまたは META タグが "yes" に設定されていて、他の項目が指定されていない場合は、ビジュアル スタイルが適用されます。

 

表示スタイルによって、コンテンツのレイアウトが変更される場合があります。 また、組み込み HTML コントロールに特定の属性 (ボタンの幅など) を設定すると、ボタンのラベルが特定の表示スタイルでは読み取り不能になる場合があります。

ビジュアル スタイルを使用してコンテンツを十分にテストし、ビジュアル スタイルを適用することがコンテンツとレイアウトに悪影響を及ぼすかどうかを判断する必要があります。

表示スタイルが適用されない場合

ビジュアル スタイルを最上位のウィンドウに適用しないようにするには、ウィンドウに null 以外の領域 (SetWindowRgn) を指定します。 NULL 以外の領域を持つウィンドウは、ビジュアル スタイルを使用しない特殊なウィンドウであると想定されています。 visual スタイル以外の最上位ウィンドウに関連付けられている子ウィンドウは、親ウィンドウでは適用されない場合でも、引き続き表示スタイルを適用できます。

アプリケーション内のすべてのウィンドウでビジュアル スタイルの使用を無効にする場合 は、SetThemeAppProperties を呼び出し、STAP_ALLOW_NONCLIENT フラグを渡さないでください。 アプリケーションが SetThemeAppProperties を呼び出さない場合、想定されるフラグ値はSTAP_ALLOW_NONCLIENT |STAP_ALLOW_CONTROLS |STAP_ALLOW_WEBCONTENT。 想定される値を指定すると、非クライアント領域、コントロール、および Web コンテンツにビジュアル スタイルが適用されます。

アプリケーションを以前のバージョンのWindowsと互換性のあるものにする

ビジュアル スタイルアーキテクチャの多くは、コントロールの外観の変更をサポートしていない以前のバージョンのWindowsで製品を出荷し続けるのを簡単にするように設計されています。 複数のオペレーティング システム用のアプリケーションを出荷する場合は、次の点に注意してください。

  • Windows 8より前のバージョンのWindowsでは、ハイ コントラストがオンの場合、表示スタイルはオフになります。 ハイ コントラストをサポートするには、ビジュアル スタイルをサポートするレガシ アプリケーションで、ハイ コントラストで UI 要素を適切に描画するための個別のコード パスを提供する必要があります。 Windows 8では、ハイ コントラストはビジュアル スタイルの一部です。ただし、Windows 8 アプリケーション (アプリケーション マニフェストの互換性セクションにWindows 8 GUID を含むアプリケーション) では、以前のWindows 7 でハイ コントラストで正しくレンダリングするための個別のコード パスを提供する必要があります。
  • タイル ビューやリンク コントロールなど、ComCtl32.dll バージョン 6 の機能を使用する場合は、それらのコントロールがユーザーのコンピューターで使用できないケースを処理する必要があります。 ComCtl32.dllバージョン 6 は再頒布可能ではありません。
  • アプリケーションをテストして、現在のバージョンを最初に確認することなく、バージョン 6 ComCtl32.dllの機能に依存していないことを確認します。
  • UxTheme.lib にリンクしないでください。
  • ビジュアル スタイルが期待どおりに動作しない場合は、インスタンスのエラー処理コードを記述します。
  • アプリケーションのマニフェストを以前のバージョンにインストールすると、コントロールのレンダリングには影響しません。

Visual スタイル