ドナドナされるプログラマのメモ

Windows用アプリのプログラミングメモ

Visual studioのC++で実行ファイルのプロパティにビルド番号を埋め込む

Visual studio, 便利なのに、なぜかビルドしたファイルのバージョンプロパティにビルド番号を埋め込めない。そこで、下記にあるIncrementBuildを導入した。

Build Incrementing for Visual Studio C++ Projects – Fooling Around

動作原理

  1. ビルド後のイベントでツールを実行。
  2. ツールはツール用設定ファイルに記録されているビルド番号を参照し、ビルドしたファイルのプロパティに番号設定。
  3. ツールはツール用設定ファイルのビルド番号をインクリメント。

注意事項

バージョン情報、というかプロパティは言語ごとにある。このソフトはデフォルトでは英語に書き込んでしまうため、日本語プロパティに書き込む場合は.iniのコメントを一箇所外し

Language=1041

とする必要がある。なお、この数値は下記に記載のLocale Identifierの10進数値である。

Language Identifier Constants and Strings | Microsoft Docs

CInfoProgressCtrlの更新(プログレスバー伸長速度を切替可能に)

CInfoProgressCtrlはCProgressCtrlを継承することでプログレスバーの上に文字を表示できるようにしているのだが、このプログレスバーの欠点の一つに、バーを伸ばす速度が制限されている、というのがある。バーが縮む方向ならば瞬時に縮むので、これを利用して

SetPos(a+1);

SetPos(a);

というコードで回避するのが一般的である。ただし、これではaがRangeの上限に等しかった場合に対応できない。a+1まで伸ばせないからだ。これに対処するには、

SetRange(0,a+1);

SetPos(a+1);

SetPos(a);

SetRange(0, max);

というようなコードを書けば良い。しかし、毎回これを書くのは面倒なのでCInfoProgressCtrlを書き換え、自動でこれをできるようにした。

今回、Publicな関数としてbool SetSmoothMove(bool smooth)を追加した。これの引数smoothにfalseを設定すると、上記処理を自動でするようになる。なお、初期値はtrueなので既存のコードへの影響はないはず。

gist3a185c716e3bff2da938623bf844cdd9

ブログをやっていてよかったこと

最近、ブログをやっていて良かったなーと思うのは、過去に調べたことが記録されていること。ブログの定義から、当たり前なんだけど。今作っているプログラムにしても、過去のブログ記事が非常に役立っている。Unicode<->マルチバイトの変換とか。