Window API を使用して、コントロールがネイティブの外観を保持していることを確認するにはどうすればよいですか?
-
02-07-2019 - |
質問
作成したコントロールの一部がデフォルトで古い 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++ を使用しており、マネージド コードは使用していません。
解決
コードとは関係ないと思いますが、適切な設定を行う必要があります マニフェスト ファイルを使用してテーマ付きコントロールを取得します。
ここにいくつかの情報があります: @msdn.com そしてここ: @blogs.msdn.com
ここで、マニフェストのあるアプリケーションとないアプリケーションの違いを確認できます。 ヘブンツールズ.com
他のヒント
マニフェストをアプリケーションに追加するには、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"
新しいバージョンでは、 ビジュアルスタジオ ある マニフェストツール プロジェクト設定にあるタブと 追加のマニフェスト ファイル このタブにあるフィールドは、マニフェスト ファイルの定義にも使用できます。
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>