ちょっとやり方を見つけるのにものすごく時間と労力がかかることがある。
これもそんなひとつ。
ATLとIBandObject でIEツールバーを作っていると、そのままの状態ではLunaスタイルが適用されなくて、他のGoogleツールバーなどと並べると、カクカクしててしょぼいボタンになってしまったりする。
で、XPのビジュアルスタイルなんてmanifest書くだけじゃん、と思ったらこれがハマった。
リソースに
ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "FooBar.dll.manifest"
とか書いてみたら、ビルドすると「出力を登録できませんでした」。
ぇぇー、と思っていろいろCut&Tryしてもさっぱり。
結局なんのことはない、VS2005以降ではVisual Studioが勝手に*.dll.embed.manifestを生成して組み込むようになってて、マニフェストが2重になってただけでした。
VS2005/2008時代のマニフェストの登録方法:
1. 以下のようなマニフェストファイルをプロジェクトに追加
CommCtrl.manifest (ファイル名はまぁなんでもいい)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly>
2. 「プロジェクトのプロパティ/構成プロパティ/マニフェスト ツール/入力と出力/追加のマニフェスト ファイル」に上記のマニフェストファイル(CommCtrl.manifest)を追加。
3. stdafx.hに
#define ISOLATION_AWARE_ENABLED 1
を追加。
以上でなんとかなる、はずです。