Win32アプリケーションにVisual Styleを適用する

Visual Studio 2005以降でWin32アプリケーションを作ったときに、コモンコントロールの Visual Style を適用する簡単な方法をまとめる。(.NETからだと何もしなくても使えるのに…)

コモンコントロールの比較(左:旧,右:新)

Visual Style の仕組み

コモンコントロールが実装されている ComCtrl32.dll の読み込むバージョンに6以降を指定すればその見た目を変えられるらしい。Side by Side (SxS) というインスタンス(exe)によって違うバージョンのdllを読み込む機能に指示を与えるためにマニフェスト(manifest)を埋め込む。 マニフェストはxmlで書かれており、VCのリンカーからある程度自動生成できる。(マニフェストツールから追加情報を与えることもできるが、ファイルを新たに作るのが面倒だったので、今回はリンカーオプションから設定した。)また、Vistaから増えた新しいコモンコントロールも使えるようになる。

設定方法

プロジェクトのプロパティ ≫ 構成プロパティ > リンカー > マニフェスト ファイル ≫ 追加のマニフェスト依存関係

に次の行を貼り付ける。(x86の場合)

type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'

複数のアーキテクチャを設定する場合は x86 を amd64 などに変更するか、VS2010ならマクロ $(ProcessorArchitecture) が使えるのでまとめて設定できる。

プロパティページから設定

ref:

PowerCommands for Visual Studio 2010

PowerCommands_Preview

PowerCommands for Visual Studio 2010というプラグインの紹介。何気に便利です。ソリューションエクスプローラから右クリックでコンソールやエクスプローラ,パスのコピーが出来るようになります。他にも色々機能がありそうだけどまあそれだけで十分便利。VS2010でしか使えないのが不思議。

使用しているとなぜかエディタで文字列を選択(反転)したときにVS自体のフォーカスが高速にチカチカと明滅(?)する謎の問題が発生。ウィンドウを強調しているわけでなく本当にフォーカスが当たったり外れたりを高速に繰り返します。もちろんエディタにマトモに文字が打てなくなります。

結果的にForumの方に解決法が載っていましたが英語でしか書いてなくてうまく検索にヒットせずちょっと間面倒でした。オプションからExtract Constantのチェックを外すと治ります。

Visual Studio Options