次の方法で共有


ビジュアルスタイルの有効化

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

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

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

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

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

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

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

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

 

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

特性 説明
種類 Win32 などの依存関係コンポーネントの型。
名前 コンポーネントの名前。
バージョン コンポーネントのバージョン。
プロセッサアーキテクチャ コンポーネントが設計されているプロセッサ。
パブリックキー・トークン このコンポーネントで使用されるキー トークン。
言語 コンポーネントの言語。

 

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

Von Bedeutung

アプリケーションが 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. .manifest YourApp.exeという名前のファイルを、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"
    

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

     

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

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

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

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

  2. .manifest YourApp.cplという名前のファイルを、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 としてアプリケーションのリソース ファイルに追加します。

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

 

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

ビジュアル スタイルのサポートは、拡張機能、プラグイン、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 コンテンツでのビジュアル スタイルの使用

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

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

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

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

 

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

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

ビジュアル スタイルが適用されていない場合

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

アプリケーション内のすべてのウィンドウでビジュアル スタイルの使用を無効にする場合 は、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 の機能を使用する場合は、ユーザーのコンピューターでこれらのコントロールを使用できない場合に対処する必要があります。 バージョン 6 ComCtl32.dll 再頒布可能ではありません。
  • アプリケーションをテストして、最初に現在のバージョンを確認せずに、ComCtl32.dll バージョン 6 の機能に依存していないことを確認します。
  • UxTheme.lib にリンクしないでください。
  • ビジュアル スタイルが期待どおりに動作しない場合は、インスタンスのエラー処理コードを記述します。
  • 以前のバージョンでアプリケーションのマニフェストをインストールした場合、コントロールのレンダリングには影響しません。

Visual スタイル