Visual Studio 2005 に カスタムウィザード を追加するには

解説

Visual C++ 2005 に、カスタムウィザード(あるプログラムのソースコードをスケルトンとしたプロジェクトテンプレート)を追加する方法をまとめます。

Visual C++ 2005 に、カスタムウィザードを追加するには、以下を行います。

  1. スケルトンとなるプログラムのソースコードを用意する。
  2. カスタムウィザード テンプレートを用いて、プロジェクトを作成する。
  3. カスタムウィザードプロジェクトのTemplatesフォルダに、用意したソースコードファイルを配置する。
  4. Templates.inf ファイルを編集する。
  5. スケルトンとするソースコードを編集する。
  6. default.js ファイルの GetTargetName 関数を編集する。
  7. default.vcproj ファイルを編集する。
  8. default.js ファイルの AddConfig 関数を編集する。
  9. default.js ファイルの PchSettings 関数を編集する。
  10. default.js ファイルの AddFilters 関数を編集する。
  11. vszファイルのフィルタに関する設定を編集する。
  12. 作成したカスタムウィザードプロジェクトを、Visual C++ 2005 のウィザードファイル用フォルダの下に移動する。
  13. vszファイルのウィザードファイルの場所に関する設定を編集する。
  14. default.js ファイルの CreateCustomProject 関数を編集する。
  15. vsdirファイルを編集する。
  16. 作成したカスタムウィザードプロジェクトのicoファイル、vsdirファイル、vszファイルを、Visual C++ 2005 のプロジェクトファイル用フォルダの下に移動する。

サンプルコード

スケルトンとなるプログラムのソースコードを用意する。

本サンプルでは、「タスクトレイ に常駐する アプリケーション を作成するには」 のソースコードを利用することとします。

カスタムウィザード テンプレートを用いて、プロジェクトを作成する。

「メニュー/新規作成/プロジェクト」を選択します。

プロジェクトの種類:Visual C++
テンプレート:カスタム ウィザード
プロジェクト名:適当な名前(今回は「TrayApplicationWizard」)
場所:適当なフォルダを指定
ソリューションのディレクトリの作成:チェックしない
でOKボタンを押します。



次へボタンを押します。


ユーザーインターフェイス:チェックを外す
その他の設定は変更せず次へボタンを押します。

プロジェクトが作成されました。

カスタムウィザードプロジェクトのTemplatesフォルダに、用意したソースコードファイルを配置する。

作成したプロジェクトの、「Templates\1041」に、用意したソースコードのフォルダ、ファイルをすべコピーします。
ReadMe.txtは上書きコピーします。
コピーしたフォルダのうち、Releaseフォルダと、Debugフォルダは削除します。
コピーしたファイルのうち、拡張子が、「ncb」「suo」「user」のファイルは削除します。

結果、「Templates\1041」の中身は、
res\MyApplication.ico
res\MyApplication.rc2
AboutDlg.cpp
AboutDlg.h
MyApplication.cpp
MyApplication.h
MyApplication.rc
MyApplication.sln
MyApplication.vcproj
MyApplicationTrayWnd.cpp
MyApplicationTrayWnd.h
ReadMe.txt ← 「Templates\1041」フォルダにもともとあるが上書きコピー
Resource.h
stdafx.cpp
stdafx.h
Templates.inf ← 「Templates\1041」フォルダにもともとある
TrayWnd.cpp
TrayWnd.h

配置したファイルを、プロジェクトに追加する。

ソリューション エクスプローラーの「テンプレートフォルダ」の下に、「Templates\1041」フォルダ内の、拡張子が「sln」「vcproj」「inf」以外のファイルを追加します。「Templates\1041\res」フォルダ内のファイルも追加します。

Templates.inf ファイルを編集する。

ソリューション エクスプローラーの「その他のファイル」の下の、Templates.inf に、「テンプレートフォルダ」の下に追加したファイル名を列挙します。



スケルトンとするソースコードを編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトのクラス名に、そのプロジェクトの名前が反映されるように、スケルトンとするソースコードを編集します。

すべきことは、スケルトンとするスースコードの中の、プロジェクト名にしたい部分を、
[!output PROJECT_NAME]
に置換します。

ソリューション エクスプローラーの「テンプレート ファイル」のファイルに関して、
MyApplication を [!output PROJECT_NAME] に置換します。(「大文字と小文字を区別する」にチェックを入れます。「単語単位」にはチェックをいれません。)

MyApplication.cpp の場合



MyApplication.rc、MyApplication.rc2 は、「コードの表示」で開いて、置換します。
MyApplication.rc の場合

default.js ファイルの GetTargetName 関数を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトのファイル名に、そのプロジェクトの名前が反映されるように、default.js ファイルのGetTargetName関数を編集します。

ソリューション エクスプローラーの「スクリプト ファイル」のdefault.js を開いて、GetTargetName関数の記述部を探します。
Templates.inf に記述したファイル名の中の、プロジェクト名にしたい部分が、プロジェクト名になるように、変数 strProjectName を用いた処理を記述します。

default.vcproj ファイルを編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトのプロジェクト設定に、スケルトンプロジェクトの設定が反映されるように、default.vcproj ファイルを編集します。 「Templates\1041」の MyApplication.vcproj ファイルをテキストエディタで開き、すべてを選択、コピーします。
ソリューション エクスプローラーの「その他のファイル」のdefault.vcproj を開いて、すべてを選択、削除し、
コピーした MyApplication.vcproj の内容を貼り付けます。

「追加したカスタムウィザード」を利用して作成したプロジェクト固有の情報が埋め込まれる、以下の情報行を削除します。
・VisualStudioProject タグ内の、Name 属性行
・VisualStudioProject タグ内の、ProjectGUID 属性行
・VisualStudioProject タグ内の、RootNamespace属性行
・Files タグ内の全行
・Globals タグ内の全行

default.js ファイルの AddConfig 関数を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトのプロジェクト設定は、default.vcproj の設定のみが反映されるように、default.js ファイルのプロジェクト設定に関する記述を削除します。

ソリューション エクスプローラーの「スクリプト ファイル」のdefault.js を開いて、AddConfig関数の記述部を探します。
try の内側の記述をすべて削除します。

default.js ファイルの PchSettings 関数を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトの stdafx.cpp が、「プリコンパイル済みヘッダーを作成する」設定になるように、default.js ファイルを編集します。

ソリューション エクスプローラーの「スクリプト ファイル」のdefault.js を開いて、PchSettings関数の記述部を探します。
PchSettings関数の内容を以下のようにします。

default.js ファイルの AddFilters 関数を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトの ソリューションエクスプローラーに、ファイル振り分け用のフォルダが作成されるように、default.js ファイルを編集します。

ソリューション エクスプローラーの「スクリプト ファイル」のdefault.js を開いて、AddFilters関数の記述部を探します。
AddFilters関数の内容を以下のようにします。

vszファイルのフィルタに関する設定を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトの ソリューションエクスプローラーのファイル振り分け用のフォルダにファイルが振り分けられるように、vszファイルを編集します。

ソリューション エクスプローラーの「その他のファイル」のTrayApplicationWizard.vsz を開いて、
Param="SOURCE_FILTER = txt"
を、
Param="SOURCE_FILTER = cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
に置換します。
また、
Param="HEADER_FILTER = h;hpp;hxx;hm;inl;inc;xsd"
Param="RESOURCE_FILTER = rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
を追加します。

作成したカスタムウィザードプロジェクトを、Visual C++ 2005 のウィザードファイル用フォルダに移動する。

一旦、作業中のカスタムウィザードプロジェクトを閉じます。

作成したカスタムウィザードプロジェクトを、プロジェクトフォルダごと、Visual C++ 2005 のウィザードファイル用フォルダの下に移動します。

Visual C++ 2005 のウィザードファイル用フォルダは、Visual C++ 2005 をデフォルトのインストール先にインストールした場合、
C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\
です。

本サンプルでは、新規プロジェクト作成の、プロジェクトの種類「MFC」に、プロジェクトテンプレートが追加されることを想定し、
C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\MFC\
の下に、作成したカスタムウィザードプロジェクトのプロジェクトフォルダを移動します。



移動後、作業中のカスタムウィザードプロジェクトを再度開きます。

vszファイルのウィザードファイルの場所に関する設定を編集する。

vszファイルのウィザードファイルの場所に関する設定を編集します。

ソリューション エクスプローラーの「その他のファイル」のTrayApplicationWizard.vsz を開いて、
Param="ABSOLUTE_PATH =
の行を削除し、
Param="RELATIVE_PATH = VCWizards\AppWiz\MFC"
を追加します。(ウィザードファイルの移動先に合わせたフォルダパスにします)

default.js ファイルの CreateCustomProject 関数を編集する。

「追加したカスタムウィザード」を利用して作成したプロジェクトのプロジェクト設定として、default.vcproj が利用されるように、default.js ファイルのCreateCustomProject関数を編集します。

ソリューション エクスプローラーの「スクリプト ファイル」のdefault.js を開いて、CreateCustomProject関数の記述部を探します。
var strProjTemplatePath = wizard.FindSymbol('PROJECT_TEMPLATE_PATH');

PROJECT_TEMPLATE_PATH

START_PATH
に置換します。



ちなみに、
var strProjTemplatePath = wizard.FindSymbol('PROJECT_TEMPLATE_PATH');
のままだと、
「追加したカスタムウィザード」を利用して作成したプロジェクトのプロジェクト設定として、
C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\default.vcproj
が使われてしまいます。
var strProjTemplatePath = wizard.FindSymbol('PROJECT_TEMPLATE_PATH');
にすると、
「追加したカスタムウィザード」を利用して作成したプロジェクトのプロジェクト設定として、
vszファイル内で指定される、RELATIVE_PATH または ABSOLUTE_PATH にある、default.vcproj
が使われます。

vsdirファイルを編集する。

プロパティウィンドウを用いて、CMyApplicationTrayWndクラス に ID_APP_EXIT、ID_APP_ABOUT、のCOMMANDメッセージ応答関数を追加します。

ソリューション エクスプローラーの「その他のファイル」のTrayApplicationWizard.vsdir を開いて、
TODO: ウィザードの説明です。

タスクトレイ常駐アプリケーションを作成するためのプロジェクトです
に書き換え、
行末の
TrayApplicationWizard

|TrayApplication
に書き換えます。

作成したカスタムウィザードプロジェクトのicoファイル、vsdirファイル、vszファイルを、Visual C++ 2005 のプロジェクトファイル用フォルダの下に移動する。

作業中のカスタムウィザードプロジェクトを閉じます。

新規プロジェクト作成の、プロジェクトの種類「MFC」に、プロジェクトテンプレートが追加されるように、作成したカスタムウィザードプロジェクトのicoファイル、vsdirファイル、vszファイルを、Visual C++ 2005 のプロジェクトファイル用フォルダの下に移動します。

Visual C++ 2005 のプロジェクトファイル用フォルダは、Visual C++ 2005 をデフォルトのインストール先にインストールした場合、
C:\Program Files\Microsoft Visual Studio 8\VC\vcprojects\
です。

本サンプルでは、新規プロジェクト作成の、プロジェクトの種類「MFC」に、プロジェクトテンプレートが追加されることを想定し、
C:\Program Files\Microsoft Visual Studio 8\VC\vcprojects\MFC\
の下に、作成したカスタムウィザードプロジェクトのicoファイル、vsdirファイル、vszファイルをコピーします。

また、カスタムウィザードプロジェクトの新規作成時に、勝手に、
C:\Program Files\Microsoft Visual Studio 8\VC\vcprojects\
に、icoファイル、vsdirファイル、vszファイルがコピーされるので、これを削除します。
(C:\Program Files\Microsoft Visual Studio 8\VC\vcprojects\
 の下の
 TrayApplicationWizard.ico、TrayApplicationWizard.vsdir、TrayApplicationWizard.vsz、を削除します)

実行

実行結果

Visual Studio のメインメニューの「ファイル/新規作成/プロジェクト新規」を選択し、プロジェクトの種類「MFC」を選択すると、テンプレートのリストに、「TrayApplicationWizard」 が追加されています。



テンプレートのリストの TrayApplicationWizard を選択し、プロジェクト名に適当な名前を入力し、場所に適当なフォルダを指定し、OKボタンを押すと、タスクトレイに常駐するアプリケーションのプロジェクトが作成されます。

ビルドし、エラー、警告がないことを確認します。

ビルド結果を実行し、タスクトレイ に常駐する アプリケーション を作成するには と同様の実行結果となることを確認します。

ダウンロード

サンプルプロジェクト