4

私が作成したコントロールのいくつかは、デフォルトで古い Windows 95 テーマになっているようです。これを防ぐにはどうすればよいですか? オペレーティング システムのネイティブの外観を保持しないボタンの例を次に示します (開発環境として Vista を使用しています)。

HWND button = CreateWindowEx(NULL, L"BUTTON", L"OK", WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON,
                                  170, 340, 80, 25, hwnd, NULL, GetModuleHandle(NULL), NULL);

Windows API でネイティブ C++ を使用しており、マネージ コードは使用していません。

4

2 に答える 2

6

アプリケーションにマニフェストを追加するには、MyApp.manifest ファイルを作成してアプリケーション リソース ファイルに追加する必要があります。

//-- This define is normally part of the SDK but define it if this 
//-- is an older version of the SDK.
#ifndef RT_MANIFEST
#define RT_MANIFEST              24
#endif

//-- Add the MyApp XP Manifest file
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "MyApp.manifest"

Visual Studioの新しいバージョンでは、プロジェクト設定に [マニフェスト ツール] タブがあり、このタブにある [追加のマニフェスト ファイル] フィールドを使用してマニフェスト ファイルを定義することもできます。

以下は、Win32 アプリケーション用の単純な MyApp.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.1"
    processorArchitecture="X86"
    name="Microsoft.Windows.MyApp"
    type="win32"
/>
<description>MyApp</description>
</assembly>

アプリケーションが他の dll に依存している場合、これらの詳細をマニフェストに追加することもできます。Windows はこの情報を使用して、アプリケーションがこれらの依存 dll の正しいバージョンを常に使用するようにします。

たとえば、コモン コントロールとバージョン 8.0 C ランタイム ライブラリのマニフェスト依存関係の詳細は次のとおりです。

<dependentAssembly>
    <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="X86"
        publicKeyToken="6595b64144ccf1df"
        language="*"
    />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity
        type="win32"
        name="Microsoft.VC80.CRT"
        version="8.0.50608.0"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b" />
</dependentAssembly>
于 2008-09-22T00:10:48.627 に答える
4

あなたのコードとは何の関係もないと思いますが、テーマ コントロールを取得するには、適切なマニフェストファイルを設定する必要があります。

ここにいくつかの情報があります: @msdn.comとここ: @blogs.msdn.com

マニフェストがある場合とない場合のアプリケーションの違いは、heaventools.comで確認できます。

于 2008-09-21T18:39:05.193 に答える