パソコンでプログラミングしよう ウィンドウズC++プログラミング環境の構築
1.6.3.6(15)
wxWidgetsプロジェクトウィザード(K2)

wxWidgetsプロジェクト用に導入する機能強化版の統合開発環境Code::Blocksウィザードを説明する。

wxWidgetsプロジェクトウィザード(K2)はwxWidgetsプロジェクトウィザード(K1)と同じく32ビット/64ビット開発に対応しランタイムライブラリは静的リンクをデフォルトとする。新たに以下の機能を追加する。

  • プロジェクト登録されるソースコードファイル(プロジェクトファイル)に以下を実装する。
  • プロジェクト登録されないが各機能に必要なファイルを追加する(追加ファイル)。
    • 統一管理されたバージョン番号をソースコードやDoxygenドキュメントにインクルードさせるためのファイル。
    • アプリケーションアイコンやメニュー項目などのビットマップファイル。
    • インストーラを作成するためのInno Setupスクリプトファイル。
    • ソースコード解析ドキュメントとHTMLヘルプファイルを作成するためのDoxygenデータファイル。
  • ターゲット(DebugXX/ReleaseXX)ビルド時に自作ツールKUdCheck/KAutoVerでバージョン番号のビルドカウント(build count)を更新する。
  • Deployバーチャルターゲットで以下を"デプロイ"する。アプリケーションやドキュメントに表示する、あるいは作成ファイル名に付加するバージョン番号は統一管理される。
    • リリースターゲット(ReleaseXX)をビルドする。
    • Doxygenで原稿からHTMLヘルプファイルを作成する。
    • Inno Setupで実行形式ファイル、HTMLヘルプファイル、(得られる場合は)バイナリ形式翻訳ファイルを含むインストーラを作成する。
    • Git for Windowsでリポジトリを更新してアーカイブファイルを作成する。
    • 自作ツールKAutoVerでバージョン番号のリビジョン(revision)を更新する。

バーチャルターゲットは複数ターゲットを連続してビルドする機能(Code::Blocks Manual 1.5 Virtual Targets)で[Project|Properties]の[Project/targets options]ダイアログ[Build targets|Build targets|Virtual targets]で設定する。プレ/ポストビルドステップのみ実行するCommands onlyターゲットをDeployバーチャルターゲットに追加し、HTMLヘルプファイル作成、インストーラ作成、リポジトリ更新、バージョン番号リビジョン更新を行わせる。

ウィザードの登録

wxwidgets_k2ウィザードディレクトリをユーザーウィザードディレクトリ(C:\Users\user\AppData\Roaming\CodeBlocks\share\codeblocks\templates\wizard)に配置し、ユーザーウィザードディレクトリのconfig.scriptのRegisterWizards関数に登録する。

function RegisterWizards()
{
...
RegisterWizard(wizProject, _T("wxwidgets_k1"), _T("wxWidgets project (K1)"),_T("GUI"));
RegisterWizard(wizProject, _T("wxwidgets_k2"), _T("wxWidgets project (K2)"),_T("GUI"));
...
}

ウィザードとして登録されるサブディレクトリは以下のファイルで構成される。

ファイル名 内容 必要性
logo.png [New from template]ダイアログ一覧に示されるアイコン 必須
wizard.png ウィザードダイアログの左に示されるビットマップ 必須
wizard.script ウィザードスクリプト 必須
wizard.xrc ウィザードダイアログカスタムページのXRCリソース オプション

wxwidgets_k2サブディレクトリは加えて以下のテンプレートファイルを持つ。

分類 ファイル名 内容
プロジェクトファイル template\app.cpp アプリケーションソースコードテンプレート
template\app.h アプリケーションインクルードテンプレート
template\main.cpp メインウィンドウソースコードテンプレート
template\main.h メインウィンドウインクルードテンプレート
template\wx_pch.h プリコンパイル対象インクルードテンプレート
template\resource.rc ウィンドウズリソーステンプレート
template\resource.wxs メインウィンドウwxSmithリソーステンプレート
追加ファイル template\version_macro.h バージョンマクロ定義インクルードテンプレートテンプレート
template\Doxyfile_autoversion PROJECT_NUMBER定義Doxygen設定テンプレートテンプレート
template\favicon.ico ファビコンテンプレート
template\bitmapHelp.xpm [Help|Help]ビットマップテンプレート
template\bitmapAbout.xpm [Help|About]ビットマップテンプレート
template\bitmapQuit.xpm [File|Quit]ビットマップテンプレート
template\InnoSetup.iss Inno Setupスクリプトテンプレート
template\Doxyfile ソースコード解析用Doxygen設定テンプレート
template\Doxyfile_winchm HTMLヘルプファイル用Doxygen設定テンプレート
template\my_header.html DoxygenヘッダHTMLテンプレート
template\my_footer.html DoxygenフッタHTMLテンプレート
template\my_customdoxygen.css Doxygenカスケードスタイルシートテンプレート
template\my_layout.xml Doxygenレイアウトテンプレート
template\mainpage_winchm.md HTMLヘルプメインページ原稿テンプレート

wxWidgets project (K2)の処理

ウィザードページ

Code::Blocksが適切にカスタマイズされている事を前提に、ウィザードは以下のウィザードページを順次表示する。

ウィザードページ ページID 種類 機能
イントロ WxIntroProject カスタム 開発者情報の設定
プロジェクトパス ProjectPathPage ビルトイン プロジェクト名とディレクトリの設定
プロジェクトコンフィグ WxConfProject カスタム ターゲットとGUIタイプの設定
追加ファイル WxSupplementaryFiles カスタム 追加ファイルの設定

イントロ、プロジェクトコンフィグ、追加ファイルウィザードページはカスタムウィザードページで、そのXRCリソースはwizard.xrcに含まれる。イントロウィザードページ開発者情報の発行者名(Publisher)は入力必須でファイルシステムが認識できる文字列とする。追加ファイルウィザードページは追加ファイルを選択するが全てチェックしておくのが望ましい。カスタムウィザードページの入力値はCode::Blocks設定ファイル(C:\Users\user\AppData\Roaming\CodeBlocks\default.conf)のXMLエレメントCodeBlocksConfig\scripts\wxwidgets_k2_wizardに記憶され次回デフォルトとなる。

セキュリティ層での実行

ウィザードスクリプトが追加ファイルのコピーでコールする関数の一部はセキュリティ層で実行する。これらの関数はスクリプトコマンドIO名前空間に属する。

これを理由として[Security Warning!]ダイアログが開きアクションの選択を求められる場合がある。

[Chose your action]ドロップダウンリスト アクション 備考
ALLOW execution of this command そのコマンド実行を許可する
ALLOW execution of this command for all scripts from now on そのコマンド実行を永久に許可する
DENY execution of this command そのコマンド実行を許可しない デフォルト
Mark this script as TRUSTED for this session セッションでスクリプトを信頼する
Mark this script as TRUSTED permanentary 永久にスクリプトを信頼する

スクリプトを信頼すればセキュリティ層で実行される全てのコマンドが許可される。セッションの信頼はCode::Blocks終了でリセットされる。アクションは[Settings|Scripting]の[Scripting settings]ダイアログの[Security]ページと[Trusts]ページでも変更できる。

スクリプト

最後のウィザードページに[Finish]で応えるとウィザードはスクリプト(wizard.script)実行し、追加ファイルの生成コピー、プロジェクトファイルの生成登録、デプロイを含むプロジェクトセットアップを行う。追加ファイル生成コピーは追加ファイルウィザードページのOnLeaveハンドラ(WxSupplementaryFiles_OnLeave)からコールされる。

  1. 各テンプレートファイルから追加ファイルを生成してプロジェクトディレクトリへコピー(TMySupFiles::CreateSupFiles)
  2. 各テンプレートファイルからプロジェクトファイルを生成してプロジェクトに登録 (TMyGenFiles::GetGenFile)
  3. プロジェクトのセットアップ (TMyProject::Setup)
    1. プロジェクトオプションの設定 (TMyProject::_SetupProject)
      1. コンパイラオプションの設定 (TMyProject::_SetupMinGW)
        • コンパイルリンクオプションの設定
        • ウィンドウズAPIライブラリファイルの追加
      2. wxWidgetsのターゲット非依存設定 (TMyProject::_SetupWx)
      3. プリコンパイル済みヘッダの設定 (TMyProject::_SetupPCH)
      4. wxSmithの設定 (TMyProject::_SetupWxSmith)
    2. ウィザードページで選択された全ターゲットのセットアップ (TMyProject::_SetupTargets)
      1. デプロイ用_DeployStartターゲットの作成(TMyDummyTargetDeployStart::constructor)
      2. デプロイ用_DeployStartターゲットのセットアップ(TMyDummyTargetDeployStart::Setup)
        • デプロイの最初に実行するコマンドをプレビルドステップに設定
      3. ターゲットの作成 (TMyTarget::constructor)
      4. ターゲットのセットアップ (TMyTarget::Setup)
        • プロジェクトに登録されている各ファイルをターゲットに登録
        • ターゲットタイプと出力ファイルの定義
        • コンパイラオプションの設定
          • デバッグビルド/リリースビルドの設定
          • wxWidgets探索パスの設定
          • wxWidgetsライブラリファイルの追加
      5. デプロイ用_DeployEndターゲットの作成(TMyDummyTargetDeployEnd::constructor)
      6. デプロイ用_DeployEndターゲットのセットアップ(TMyDummyTargetDeployEnd::Setup)
        • デプロイの最後に実行するコマンドをプレビルドステップに設定
      7. デプロイ用Deployバーチャルターゲットの作成
    3. 追加ファイルの一部をプロジェクトファイルとして登録(TMyProject::_SetupAdditionalGenFiles)

ターゲットのプレ/ポストビルドステップ

スクリプトの作成するターゲットのプレ/ポストビルドステップをまとめるが、ポストビルドステップを定義するターゲットは無い。DebugXX/ReleaseXXのプレビルドステップはビルトイン変数$(TARGET_NAME)利用で全て等しい。_DeployBeginと_DeployEndはDeployバーチャルターゲットで使用されるCommands onlyターゲットである。

Target Step Execution steps
_DeployBegin Pre-build -
Post-build -
Debug32 Pre-build cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1
Post-build -
Release32 Pre-build cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1
Post-build -
Debug64 Pre-build cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1
Post-build -
Release64 Pre-build cmd /c $(#codeblocks.bin)\KUdCheck --target $(TARGET_NAME) [[ local t=GetProjectManager().GetActiveProject().GetBuildTarget(ReplaceMacros(_T("$(TARGET_NAME)")));for (local i=0;i<t.GetFilesCount();++i) {print(t.GetFile(i).relativeFilename+_T(" "));} ]] && $(#codeblocks.bin)\KAutoVer --status $(TARGET_NAME) --increment 0.0.0.0(1) --silent || if not ERRORLEVEL 2 exit 1
Post-build -
_DeployEnd Pre-build cmd /c $(#codeblocks.bin)\KAutoVer --date no-change --silent
cmd /c cd doxygen & $(#codeblocks.batch)\k_doxygen_winchm
cmd /c cd innosetup & "C:\Program Files (x86)\Inno Setup 6\ISCC" InnoSetup.iss
cmd /c $(#codeblocks.bin)\KGitWVer --autoversion --tag #{MAJOR}.#{MINOR}.#{BUILD}.#{REVISION} --archive archive\$(PROJECT_NAME)-#{MAJOR}.#{MINOR}.#{BUILD}.#{REVISION}.zip && $(#codeblocks.bin)\KAutoVer --increment 0.0.0.1(A0) --no-update-target --status $(TARGET_NAME) --silent || if not ERRORLEVEL 2 exit 1
Post-build -

DebugXX/ReleaseXXはプレビルドステップでプロジェクトファイルに更新がある場合にのみバージョン番号リリース回数を更新する。_DeployBeginは将来拡張対応として何もせず、_DeployEndはHTMLヘルプファイル作成、インストーラ作成、リポジトリ更新、バージョン番号リビジョン更新を行う。

Deployバーチャルターゲット

スクリプトはDeployバーチャルターゲットを作成する。Deployバーチャルターゲットは_DeployStart、ReleaseXX、_DeployEndターゲットを順次ビルドする。ビルドの順番は重要で、特に_DeployEndは必ず最後にビルドする。しかしCode::Blocksの恐らくバグで意図せずビルド順が崩れる場合があり注意する。

バーチャルターゲットのビルド順は、当初は[Project/Properties]メニューで開く[Project/targets options]ダイアログ[Build targets]ページ[Build targets]リストボックスの定義順に従う。これ以降に[Re-order]で定義順を変更するとビルド順は崩れ、当初の定義順でもなく変更後の定義順でもない。さらに定義順を当初に戻してもビルド順は戻らない。一例を示す。

  1. 定義順をT1、T2、T3、T4としてターゲットを作成する。バーチャルターゲットVを作成し全て登録する。ビルド順はT1、T2、T3、T4となる。
  2. 定義順をT1、T4、T2、T3に変更する。Vのビルド順はT1、T4、T3、T2となり定義順と一致しない。
  3. 定義順をT1、T2、T3、T4に戻す。Vのビルド順はT1、T2、T4、T3となり定義順と一致しない(元に戻らない)。

定義順はT1~T4以外のターゲットにも影響され、例えばT2とT3の間にVに登録しない別のターゲットを挿入してもビルド順は崩れる。

定義順とビルド順が一致しない場合は[Build targets]ページ[Virtual targets]で開く[Virtual build targets]ダイアログの[Build targets contained]チェックリストボックスを一時的に変更して元に戻し[Close]すれば良い。なお最も確実にはプロジェクトファイル(.cbp)を確認する必要がある。

<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
...
<VirtualTargets>
<Add alias="Deploy" targets="_DeployStart;Release32;Release64;_DeployEnd;" />
</VirtualTargets>
...
</Project>
</CodeBlocks_project_file>
覚え書き
Deployなどのバーチャルターゲットを選択して[Build|Build and run]あるいは[Build|Run]すると[Select target]ダイアログが開き実行するターゲットの選択を問われる。_DeployStartや_DeployEndなどのCommands onlyターゲットを選択して[Build|Build and run]あるいは[Build|Run]するとYou must select a host application to "run" a commands-only target...なるメッセージダイアログが表示される。ホストアプリケーション(host application)は[Project|Set programs' arguments]の[Select target]ダイアログ[Host application]テキストボックスで指定できるが、これは本来ダイナミックリンクライブラリプロジェクト動作確認用でCommands onlyターゲットにあえて指定する必要は無い。Deployなどのバーチャルターゲットを選択するとビルトイン変数$(TARGET_NAME)は空白文字列となり、これを参照するユーザー定義メニューコマンドの多く(例えば[Autoversion|Not pre-increased])はエラーとなる。

ファイル配置

スクリプトによるファイル配置をフレームベースのプロジェクトDesktop3を仮定してまとめる。ダイアログベースならDesktop3Frame.*はDesktop3Dialog.*となる。Desktop3.cbpを除き各ファイルはウィザード供給テンプレートファイルから生成する。追加ファイルのうちautoversion-template\version_macro.hだけは生成コピー後にプロジェクトファイルに登録する。

覚え書き
DebugXX/ReleaseXXプレビルドステップは自作ツールKUdCheckがプロジェクトファイルの更新を検知すると自作ツールKAutoVerがautoversion-template\version_macro.hをテンプレートファイルとしてプロジェクトディレクトリにversion_macro.hを生成するが、こちらをプロジェクトファイルに登録すると常に更新状態となり他に更新が無くとも[Build|Build]でビルドを実行する事になる。
ディレクトリ ファイル 内容 分類 テンプレートファイル
[プロジェクトディレクトリ] Desktop3.cbp Code::Blocksプロジェクト 自動生成ファイル -
Desktop3App.cpp アプリケーションクラスソースコード プロジェクトファイル app.cpp
Desktop3App.h アプリケーションクラスインクルード app.h
Desktop3Frame.cpp メインウィンドウクラスソースコード main.cpp
Desktop3Frame.h メインウィンドウクラスインクルード main.h
wx_pch.h プリコンパイル対象インクルード wx_pch.h
resource.rc ウィンドウズリソース resource.rc
├ wxsmith Desktop3Frame.wxs wxSmithリソース resource.wxs
├ autoversion-template version_macro.h バージョンマクロ定義インクルードテンプレート 追加ファイル version_macro.h
│└ doxygen Doxyfile_autoversion PROJECT_NUMBER定義Doxygen設定テンプレート Doxyfile_autoversion
├ iconimages favicon.ico ファビコン favicon.ico
bitmapHelp.xpm [Help|Help]ビットマップ bitmapHelp.xpm
bitmapAbout.xpm [Help|About]ビットマップ bitmapAbout.xpm
bitmapQuit.xpm [File|Quit]ビットマップ bitmapQuit.xpm
├ innosetup InnoSetup.iss Inno Setupスクリプト InnoSetup.iss
└ doxygen Doxyfile ソースコード解析用Doxygen設定 Doxyfile
 │ Doxyfile_winchm HTMLヘルプファイル用Doxygen設定 Doxyfile_winchm
 │ my_header.html ヘッダHTML my_header.html
 │ my_footer.html フッタHTML my_footer.html
 │ my_customstylesheet.css カスケードスタイルシート my_customdoxygen.css
 │ my_layout.xml レイアウト my_layout.xml
 └ winchm mainpage_winchm.md HTMLヘルプトップページ用原稿 mainpage_winchm.md

ソースコード

生成ソースコードはwxWidgets project (K1)に動作確認(3)で加えたコードをあらかじめ追加したものになる。それ以外の主な変更点として、コード中のプロジェクト固有文字列(アプリケーション名と開発者情報の一部)定義をKAutoVerテンプレートファイル(autoversion-template\version_macro.hとautoversion-template\doxygen\Doxyfile_autoversion)に集中した。他のファイルはテンプレートファイルから生成された(プレースホルダー文字列がバージョン番号に置換された)ファイル(version_macro.hとdoxygen\Doxyfile_autoversion)をインクルードしてマクロ(MYAPPINFO_NAMEなど)で参照する。開発途上でコード中のアプリケーション名を変更するための処置だが、別にアプリケーション名ベースでプロジェクトファイル名(Desktop3.cbp)、実行形式ファイル名(Desktop3.exe)、クラス名(Desktop3App、Desktop3Frame)なども定義されているので変更は慎重さが求められる。

autoversion-template\version_macro.h(抜粋)

ifndef VERSION_MACRO_H
#define VERSION_MACRO_H
#define MYAPPINFO_NAME "Desktop3"
#define MYAPPINFO_PUBLISHER "KodamaDeveloped"
#define MYAPPINFO_AUTHOR "Takeshi Kodama"
#define AUTOVERSION_MAJOR #{MAJOR}
...
...
#endif //VERSION_MACRO_H

autoversion-template\doxygen\Doxyfile_autoversion

PROJECT_NAME = "Desktop3"
PROJECT_NUMBER = "#{MAJOR}.#{MINOR}.#{BUILD}.#{REVISION}"
PROJECT_BRIEF = "Project Desktop3"
CHM_FILE = ../../bin/Desktop3.chm

Desktop3App.cpp(抜粋)

...
#include "version_macro.h"
...
bool Desktop3App::OnInit()
{
...
locale_.Init(wxLANGUAGE_DEFAULT,wxLOCALE_DONT_LOAD_DEFAULT);
locale_.AddCatalog(MYAPPINFO_NAME);
locale_.AddCatalog("wxstd");
...
}

Desktop3Frame.cpp(抜粋)

...
#include "version_macro.h"
...
Desktop3Frame::Desktop3Frame(wxWindow* parent,wxWindowID id)
{
...
helpController_.Initialize
(wxFileName{wxStandardPaths::Get().GetDataDir(),MYAPPINFO_NAME ".chm"}
.GetFullPath());
}
...
void Desktop3Frame::OnAbout(wxCommandEvent& event)
{
wxString msg;
msg<<MYAPPINFO_NAME<<"\n"
<<_("Version: ")<<AUTOVERSION_STR_VER_BUILD_COUNT_STATUS<<"\n"
<<_("Date: ")<<AUTOVERSION_STR_DATE_DMY_MONTH_SHORT_NAME;
wxMessageBox(msg, _("Welcome to..."));
}
...

innosetup\InnoSetup.iss(抜粋)

...
#include "..\version_macro.h"
...
#define MyAppId "{"+AUTOVERSION_STR_GUID
#define MyAppName MYAPPINFO_NAME
#define MyAppVersion AUTOVERSION_STR_VER
#define MyAppPublisher MYAPPINFO_PUBLISHER
;#define MyAppURL "http://www.example.com/"
#define MyAppExeName MyAppName+".exe"
#define MyAppCopyright "(C)"+AUTOVERSION_STR_YEAR+" "+MYAPPINFO_AUTHOR
...

doxygen\Doxyfile(追加部分抜粋)

Doxyfile_autoversionで定義するオプションは念のためコメントアウト(文頭#)する(インクルード前なので不要だが)。

...
#PROJECT_NAME = "XXXX"
#PROJECT_NUMBER = "0.0.0.0(0)"
#PROJECT_BRIEF = "Project XXXX"
...
@INCLUDE = Doxyfile_autoversion

doxygen\Doxyfile_winchm(抜粋)

先にインクルードするDoxyfile経由でDoxyfile_autoversionのCHM_FILEを使うためコメントアウト(文頭#)する。

@INCLUDE = Doxyfile
...
#CHM_FILE = ../../bin/XXXX.chm
...

wxWidgets project (K2)のカスタマイズ

スクリプトの設定するオプションは全てスクリプトにハードコーディングされている。カスタマイズされる可能性の高いオプションはスクリプト冒頭でルートテーブルスロット(C++で言うグローバル変数)に代入していて、以下を除きwxWidgets project (K1)から変更されていない。

  • ウィザードサブディレクトリ名(g_MyFolder)の変更。
  • 開発者情報(g_ProjXXX)はWxIntroProjectウィザードページに与えるデフォルト(g_DefaultProjXXX)に変更。
  • 開発者情報デフォルトとして発行者名(g_DefaultProjPublisher)を追加。
スロット名 内容 初期設定 備考
g_MyFolder ウィザードサブディレクトリ名 _T("wxwidgets_k2")
g_DefaultProjAuthor [AUTHER_NAME]に置換される文字列デフォルト _T("Takeshi Kodama") テンプレートファイル置換処理
g_DefaultProjEmail [AUTHER_EMAIL]に置換される文字列デフォルト _T("") テンプレートファイル置換処理
g_DefaultProjWebsite [AUTHER_WWW]に置換される文字列デフォルト _T("http://www17.plala.or.jp/KodamaDeveloped/LetsProgramming/") テンプレートファイル置換処理
g_DefaultProjPublisher [AUTHER_PUBLISHER]に置換される文字列デフォルト _T("KodamaDeveloped") テンプレートファイル置換処理
... ... ... ...

開発者情報がハードコーディングされているwxWidgets project (K1)と異なりウィザードページで変更可能なため、スクリプトのカスタマイズを必須としない。

生成アプリケーション

wxWidgets project (K2)の生成するアプリケーションはwxWidgets project (K1)をベースに以下の改良を加えた。

  • HTMLヘルプファイルを表示する(フレームベース[Help|Help]メニュー項目あるいはダイアログベース[Help]ボタン)。ウィザードはHTMLヘルプトップページ用原稿(mainpage_winchm.md)の雛形を用意しそのまま動作確認できる。
  • 統一管理されたバージョン番号をアプリケーション情報として表示する([Help|About]メニュー項目あるいは[About]ボタン)。ウィザードはバージョン番号データファイルを用意しないがプレビルドステップなどが自作ツールKAutoVerを最初に実行する時に自動作成される。
  • GNU gettext国際化機能が生成する翻訳ファイルで文字列を置換し日本語表示できる。ただしウィザードは翻訳ファイルを用意せず、統合開発環境のカスタマイズ(2)の[Tools|Gettext|Get]などで事前に翻訳ファイルを作成しないと英語表示のままとなる。
  • メニュー項目あるいはボタンにビットマップとショートカットキーを追加する。
  • ダイアログベースアプリケーションの終了コードを0とする。wxWidgets project (K1)のそれは1でコマンドプロンプトはエラー終了と扱う不具合があった。