Visual C++ 2005で作成した実行ファイルをVista上で実行してもコモンコントロールがXPスタイルになる件について


発生日付:2007/08/13 実行OS:Windows Vista 発生契機:Windows Vista上でコモンコントロールが表示された時

解析

●WindowsXPスタイルを適用するManifestリソースはリンクされていた。
●以下のAPIをWM_CREATEを捕捉した時点で実行したがXPスタイルで表示された。
 SetWindowTheme(m_hWnd, L"explorer", NULL);
  /* m_hWnd:コモンコントロールのウィンドウハンドル */

●「マルチバイト文字コードセット(Shift-SJISコード)」でコンパイルしていた。

 このマルチバイト文字コードセットを「Unicodeコードセット」でコンパイルした所、コモンコントロールはAeroスタイル(Vistaエクスプローラと同じスタイル)に変化して表示された。
 一時はUnicode文字セットを使用していない事が原因と誤解したが、Visual Studio 2005が自動生成するManifestを使用することで問題を解決出来ることが判明した。
 自力でリソースに埋め込んでいたManifestファイルを除去して再コンパイル&再実行した所、Aeroスタイルで表示された。

原因

 Manifestファイルの誤り

対処

 リソースに手動で組み込んでいたManifestファイルの使用を止め、自動生成されたマニフェストファイルを使用する。

状態

 完了

補足事項

 コモンコントロールをAeroスタイルにする場合は、以下の条件を全て満たす必要がある。
 ● 正しいManifest(Visual Studioに自動生成させるのがベター)を実行ファイルにリンクすること。
 ● SetWindowTheme()をコモンコントロールに引き渡すこと。
 ※ Manifestを生成する場合、以下のプリプロセッサ指令をstdafx.hに埋め込むとよい。
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")



最終更新日:2007/08/19