INI 編集ツール IniModifier を作成してみる (2)
過去の記事へのリンク:
INI 編集ツール IniModifier を作成してみる (1)
リソース配置が楽なのでダイアログベースで作ることにする。
とりあえずリソースエディタで適当にコントロールを配置して、UI を決める。
ダイアログの自動リサイズを実装するため、CDialogResize も継承しておく。
class CMainDlg
: public CDialogImpl< CMainDlg >
, public CDialogResize< CMainDlg >
{
テキストを編集したり色をつけたりしたいので、リッチエディットコントロールを使ってみようと思う。リッチエディットコントロールを使うのはこれが初めてだが、WTL のヘッダを見ていると結構いろいろできそうなので、せっかくなので調べながら作っていくことにする。
リソースエディタのイメージはこんな感じ↓
リッチエディットコントロールは 2.0 を使うこととする。
CDialogResize は atlframe.h
CRichEditCtrl は atlctrls.h
にそれぞれ定義されているので、stdafx.h は下記のようになった。
// stdafx.h
// Change these values to use different versions
#define WINVER 0x0500
#define _WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#define _RICHEDIT_VER 0x0200
// WTL よりも ATL を優先する場合は、atlapp.h より前に include すること
#include <atlstr.h>
#include <atltypes.h>
#include <atlbase.h>
#include <atlapp.h>
extern CAppModule _Module;
#include <atlcrack.h>
#include <atlframe.h> // CDialogResize
#include <atlctrls.h> // CRichEditCtrl
#include <atldlgs.h> // CFileDialog
処理の関係上、文字セットは UNICODE ではなく、マルチバイト文字セット(MBCS) でビルドすることにする。
// stdafx.cpp
#if defined( _UNICODE ) || defined( UNICODE )
#error This program doesn't assume unicode build.
#endif
# ところで、なぜ #error ディレクティブではマルチバイト文字が使えないんだろ。
# ダブルクォーテーションで括ってやってもだめ。L"" としてもだめ。何かうまくいくようにしてくれるといいんだけど。
IniModifier
Inno Setup のフロントエンドである ISTool の日本語言語ファイル作成をしたりしているが、INI 形式のファイルをアップデートが非常にめんどくさすぎるので何かツールを作成しようと思う。
開発環境は以下の通り。
- Windows XP sp2
- Visual C++ .NET 2003 sp1
- WTL 8.0
要件仕様は下記の通りとする。
- ファイルのエンコーディングは SJIS/UTF-8 に対応。(できれば EUC も対応。)
- セクション名・キー名で差分チェックを行う。
- Visual SourceSafe の比較画面のように見比べつつ編集もできるようにする。
- セクション:[太字表示]
- コメント:緑色表示
- 追加されたセクション・キー:青色表示
- 削除されたセクション・キー:赤色表示
- 削除されたキー:キーの先頭に
";<DEL>:" を追加。
IniModifier の完成イメージはこんな感じ↓