概要設計(大雑把)
では、今回のツールですが、SDI のアプリケーションにします。文字の解説ではわかりにくいので、ちょうど
Visio に UI を作図できる機能があったので作ってみました。

あ、ちなみに Source To Html Converter の略で S2H_Conv
と名づけました(直球だな・・・)
画面は可変の境(Splitter)を持たせる感じでまず、
左半分と右半分に分かれます。左半分はエクスプローラのように、ファイルデバイスを参照できるようなツリービューです。「フォルダ」って書いてあるペインも使います(CPaneContainer:atlctrlx.h)。
右半分は元のソースと変換結果の HTML を見れるように二つの Edit
系クラスを使います。それぞれのウィンドウは可変にしたいので、CSplitterWindow(atlsplit.h) を利用します。
その他、CFrameWindow や CUpdateUI
などの基本的なクラス、そしてステータスバーやツールバーの使い方についても述べていこうと思っています。
若干面倒なのが UI
の設計の部分なんですが、全ソースを引用する頻度って低いと思うわけで、一部を選択して変換することが多いと思うのです。そのアクションをどうするかを決めなくてはなりません。範囲選択したいということはソースの内容を表示しなくてはならないということで、取り合えず右上のウィンドウから右クリックのメニューで変換という操作を行うと、右下のウィンドウに結果が表示されるということにしましょう。
また、HTML
のタグを見せられてもうまく表示されているのかはわかりません。これもプレビューできるようにする必要があるかと思います。この辺は IE
を使う方向で行きたいと思うのですが、問題はどう表示させるかですね・・・。
最初は直接
Explorer
を起動する形にして、そのあとで右下をタブ化したりして表示できるようになるとうれしいかもしれません。どこまでやれるかは要望しだいですが、そのような変更をするときに
WTL を使っていると楽だなぁと体感していただければ幸いです。
早速プロジェクトを作る
それでは ATL/WTL
AppWizard を使ってプロジェクトを作成します。
プロジェクトは
S2H_Conv としました。

日本語化されたウィザードがほしい方は環境編のほうからダウンロードしてパッチを当ててください。デフォルトで
SDI になっているので、大きく変えるところはありませんが、とりあえずアプリケーションの種類のページで cpp
を生成するようにしました。

ユーザーインタフェースの特徴のところは、どうせすぐに変えてしまうのでそのままにしておきました。

これで完了を押してプロジェクトを作成します。
あ、今回の開発環境は
Visual Studio.net 2003、WTL 7.1、StlPort 4.6.0
を利用しています。そんなに面倒なことをしていないので、VC6 や .net の STL で動くと思います。WTL
はあまり古いのを利用する意義がないと思うので、この機会に最新にしてみてください。
出来上がったソースの解説
できあがったプロジェクトは当然このままでコンパイルできます。それでは、ここのファイルの役割について大雑把に述べていきます。
が、その前に MFC
の最大の挫折点は何かというとドキュメント・ビューアーキテクチャだったと個人的に思うわけなのですが(たぶん今はわかるはず・・・)、WTL
でも Frame と View という概念が出てきますので、簡単に説明しておきます。

上の図を見ていただければわかると思うのですが、MFC と大して変わるわけでもないような気がします。ただ Document
という概念がないので、データ部分をどう持つかという点に関しては自由度がある感じがします(あまり余計なことを書くよくわかってないのがばれるんですが)
Frame の部分は
Window の動作を大きく変えない限り(MDI or
SDI)変わりません。つまりアプリケーションの唯一の親ウィンドウってことになります。その中にいくつもの子ウィンドウ(View、コントロール)を作っていくという形になります。
-
stdafx.h
と stdafx.cpp
プリコンパイルヘッダです。cpp
は置いておいて(めったに触らないので)ヘッダファイルのほうは目を通しておいたほうが良いでしょう。基本となる Windows
のバージョン指定や IE、RichText
などのバージョンの指定があります。これらのバージョンはフレームやメニュー、コモンコントロールなどで特定のバージョン以降で実装された機能を有効にするためなどに使います。
-
S2H_Conv.cpp
メインファイルです。といっても頻繁に書き換えるようなところではなく、スタートアップルーチンなどが含まれていると考えてください。SDK
とかでいう WinMain() が置かれるファイルです。ここも滅多にいじりません。
-
MainFrm.h と MainFrm.cpp
このアプリケーションの基本部分です。WTL では基本となる親 Window とメニュー、ステータスバーなどを管理するのが
Frame という呼び名をつけられたクラスです。
メッセージマップやイベントハンドラ、子ウィンドウ(View)の作成などの基本的な処理が行われています。アイコンのクリックやメニューのクリックなどのイベントを
View に伝えたりします。
今回は
SplitterWindow を使うので、先にここを変更することになります。
-
S2H_ConvView.h と S2H_ConvView.cpp
これらは
MainFrm を親とする子ウィンドウになります。たとえばここを CEdit から継承すると(AppWizard
でビューの基本クラスを変更する) Edit
が作成されます。今回はこのファイルを使いません。なぜならちょっと名前から意味が想像しにくいからです。
あとで適切な名前のビューを作成することになりますが(たとえば CSourceView、CHtmlView
など)、雛形になるかもしれないのでとっておいてください。
-
AboutDlg.h と AboutDlg.cpp
メニューのヘルプから About
を選択したときに表示されるダイアログです。ダイアログはリソースで作成したあと、CDialogImpl
を継承したクラスで実体化します。
今回は簡単な設定ダイアログを追加するかもしれません。
-
resource.h、その他のファイル(.rc、.bmp、.ico)
これらはこのアプリケーションで使うリソースです。WTL
のフレームワークからの利用には特徴があるので、あとでその辺を述べたいと思います。