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:

TopCoder Arena plugin moj

mojというTopCoder Arenaのプラグインの紹介です。日本語でこれについて書いてある情報が無かったので書きました。因みにこの記事の内容の殆どは次のフォーラムの引用です。
TopCoder Forums moj (TZTester modification, new features)

mojについて

SRMのソースコードのスケルトンを生成するときに賢いテストコードを挿入します。問題に提示されている全テストケースを瞬時に正確に判定でき、時間を節約できます。
mojはTZTesterの修正版です。TZTester他のプラグインについてはぐぐってください。
機能要約:

  • 出力がかわいくなる
  • doubleの誤差1e-9まで許容
  • 簡単にカスタムテストを作れる
  • Javaと切り替え可能
  • 実行時間測定

他に特筆すべきこと:

  • gcc,VCに対応
  • テストコードがclassの外にあり邪魔にならない

出力はこんな感じにかわいくなります。

Test Case #0... PASSED (relative error 5.44969e-014)
Test Case #1... PASSED (relative error 5.68462e-012)
Test Case #2... PASSED (relative error 4.05691e-008)
Test Case #3... PASSED

使い方

フォーラムの “Download moj” のリンクからzipを落とします。CodeProcessorとFileEditも同梱されています。
基本的にmoj_instructions.txtに説明が書かれていますが、周りのプラグインの入れ方は先程のようにぐぐったほうが詳しく画像付きで説明されていたりするので、その方が間違いもなく楽です。TZTesterとの差分は、次のように読み替えるだけです。

  • TZTester.jar → moj.jar
  • tangentz.TZTester → moj.moj

既に他のプラグインを入れている方は、次の箇所を更新してください。

  • Common ClassPath
  • CodeProcessor Configuration > CodeProcessor Script
  • CodeProcessor Configuration > FileEdit Configuration > Code Template

雛形はzipにcpp,javaファイルがあるので、それに習って書き換えます。

PowerCommands for Visual Studio 2010

PowerCommands_Preview

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

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

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

Visual Studio Options

Visual Studioでビルド時のファイルオープンエラー

対象はVista以上。俺はWindows Server 2008 R2で発症。

症状はVisual Studioのあらゆるバージョンで、F5とかで実行後にビルドしようとすると以下のようなエラーが発生。そのexeのプロセスが残ってるわけでもなく、ファイルロックはシステムプロセス(pid=4)のみ、explorerから削除は出来たりする。

error LNK1104: ファイル '[ターゲット].exe' を開くことができません。

解決法は”Application Experience”サービスを有効(手動でおk)にしろ、とのこと。

原因他詳細は以下(英語)。
Can’t delete EXE files in Vista / Windows 7 (SOLVED)

経緯は以下。
Visual Studio フォーラム > ビルド時の不明なファイルオープンエラー

そもそもそのサービスを無効にしてしまったのは鯖OSの都合で、別の問題(ファイル共有が有効にならない)を解決するためにセキュリティの構成を作り直したからだと思う。

それにしても初めてMSDNフォーラム使ったw人が多いだけあって、反応も早かった。詳細書いたらちゃんと誘導してくれるし。案外便利だな、なんで今まで使わなかったんやろ?