VC++5.0入門7
はじめてのAppWizard 97/8/25

こんにちは。最近のこのHPへの訪問者数の伸びは、とてもうれしい反面、おそろしいものもあります。講座の方は、なかなか進まないのですが、、、。今回もゆっくりです。
まあ、なんにせよ、今日はAppWizardを使ってみましょう。(ちなみに、AppWizardはアップウイザードと発音するらしいですね。)
さて、VCを立ち上げ、ワンポイントが出る人はそれを消して(以後、ワンポイントの話しはしません)、ファイルの新規作成を選んでください。プロジェクトのタブのところで、いよいよ、MFC AppWizard(exe)を選んでください。そして、右の方でパス名を決め、その上にプロジェクト名を適当に入力してください。パス名はみなさんにお任せします。プロジェクト名は何でも良いのですが、私はskeltonとしてみます。そして、OKボタンを押してください。ステップ1というダイアログボックスが出てきて、SDI、MDI、ダイアログベースのどれかを選択するように聞いてきます。それぞれ、単一文書インターフェース(一度に一つのウインドウを使うアプリケーション、例は、メモ帳)、複数文書インターフェース(アプリケーション内に複数のウインドウが出るタイプ、例はVCそのもの)、ダイアログボックス風のアプリケーションという意味です。元気があれば、それぞれ確認してみるべきですが、ここでは、私の独断と偏見で、SDIを選ぶことにします。SDIの前に黒丸をいれて「次へ」ボタンを押してください。その後は、デフォルト(つまり初期設定)を受け入れますので、他にはふれず、ただ、次へのボタンを押せなくなるまで押し続けてください。次に「終了」ボタンを押すと、次のようなスケルトンを作っても良いか、と聞いてくるので、OKを押して見てください。しばらくすると、SDIアプリケーションを作る基本的な枠組み(スケルトン)が完成します。つまり、この時点で、決まりきったコードが自動生成され、これ以後にプログラミング作業が始まるのです。
しかし、まず、何もしないで、ビルドの実行を選んでみてください。何かがないよ、と言ってきますが、そのまま「はい」を選んでください。コンパイル・リンクが行われ、自動的にその実行ファイルが実行されます。どうです?予想していましたか?何もない真っ白なウインドウが表示されているでしょう。これは、ある意味、VC入門3のプログラムと同じものです。が、良く見ると、メニューやツールバーなどもあり、かなり、高級感があると思います。
これは、マイクロソフトの人が、SDIアプリケーションに最低限必要だと考えたものが、デフォルトでついているのです。(デフォルトという言葉は、ユーザが何もしないときに、自動で選ばれるもの、という意味です。)ただ、メニュー項目を選んだり、ツールボタンを押したりしても、まだ何も起こりません。これらは、これからインプリメントしていきますが、今は、単なる見かけ(インターフェースという言葉も使いますね)なのです。(インプリメントするとは、具体的に仕事をするようにコードを書くという意味です。)
さて、VCのウインドウ(Microsoft Developer Studioとタイトルにありますね)の左の枠の下に、4つタブがあります。ここで、File View(タイプが面倒なので以後ファイルビューと書きます。他のタブも同じです。)をクリックすると、このプロジェクトに含まれるファイルを全て見ることができます。まず、ソースファイルのところを見ると、6個のファイルがあることがわかります。げーっ、ですね。さらにヘッダーファイルにも6個のファイルが、リソースファイルには4個のファイルがあり、おまけに下の方にReadMe.txtなんてのもあります。
私がはじめてこれを見たとき、絶望的な気分になりました。こんなにたくさんのファイルを管理しなきゃいけないの?それに、どれがメインなの?(その頃、WinMainは無いということは知りませんでした。(笑?))と思ったのです。
ここで私なりの解説を書きましょう。まず、ソースファイルというのは、プログラムの本文のようなものです。ここに書いてあるのが「C++入門」などで書いてきたソースに相当するものです。ただ、私の「C++入門」ではプログラムはすべてひとつのファイルに書いてきました。実は、C/C++ではこのように多くのファイルに分割しておくこともできるのです。ここでは、VC(AppWizard)が勝手にそうしてくれたのです。次にあるヘッダーファイルもプログラムの一部です。ここには、主に、クラスの宣言などを書くのですが、詳細はあとで説明しましょう。その後のリソースファイルは、後で詳しく見ていきますが、アイコンやツールバーなどのファイルです。最後のReadMe.txtはプログラムとは関係ありません。これはファイル自体がすべてコメントのようなものです。これも後で見てみましょう。
ここまでの説明はまだとっかかりですから、ここまで読んで分からなくて、当然です。これから見ていくのですから。
さて、次にクラスビュー(Class...なんて書いてあるタブです)のタブをクリックして見てください。skeltonクラスというアイコンが表示されるでしょう。これをクリックすると、AppWizardが書いてくれたファイル(つまり、さっき見たファイル)に書いてあるクラスを見ることができるのです。これから、CAboutDlg、CMainFrame、CSkeltonApp、CSkeltonDoc、CSkeltonViewという5つのクラスがあることがわかります。これらのクラスをクリックするとそのクラスにどんなメンバがあるかがわかります。例えば、CSkeltonAppには、CSkeltonApp()、InitInstance()、OnAppAbout()という3つのメンバ関数があることがわかります。
ここで、ぜひ、ファイルビューに戻って、そこに表示されているファイル名を次々にダブルクリックしてみてください。(ただし、cppとhという拡張子のものだけにしてください。rcという拡張子のものを選ぶとちょっと変わった画面にいってしまいます。これについては何回か後で説明します。)そうすると、その名前のファイル(くどいですが、AppWizardが自動で書いてくれたファイル)が開かれます。そして、ちょっと苦しいですが、とりあえず目を通して見てください。
たぶん、いよいよ絶望的な気分になることでしょう。私はなりました。そのころちょっとは(文字ベースの)C++をかじっていたのですが、これらのファイルを見て目を疑いました。まず、膨大であること、それに、これらは本当にC++のファイルなんだろうか?、、、と。これらは確かにC++です。(VC++なんだから、当たり前ですか。)そして、意味不明のファイルたちも、解説を読みながら、良く見ているとだんだんわかってきます。
ただ、すぐにでも解説を読んで楽になりたいと思ってもだめです。C++、特に、ウインドウズ用ライブラリ付きのC++は、多少の苦労なしには絶対覚えられません。よく、○○が楽に覚えられます、なんて宣伝文句がありますが、覚えて価値のあるものが簡単に覚えられるはずはありません。ここで、覚悟は決めてください。しばらくはコードの海でのたうちまわるのだ、と。(ちょっと言い過ぎですか?^^;)でも、この講座を読めば、まあ、なんとかなるようがんばります。それと、楽に、という言葉は私は信用しませんが、苦しめば良い、という大昔の日本人好みのやり方にも賛成できません。楽にではなくとも、楽しく、は可能だと思います。(のたうちまわりながらも、楽しく、、、ってちょっと変ですかね。つまり、気持ちの持ちようです。)
さて、そういうわけなので、しばらくコードを眺めてみてください。わからなくて当然です。でも、さっきクラスビューで見たクラスやメンバ関数名を見つけられれば、大進歩です。見つけてください。こういう作業は直接の役には立たないと思いますが、とにかくこのコードを見慣れることは(将来のためにも)必要だと思います。よく見ていくと、例えば、CSkeltonAppというクラスは、skelton.hというファイルの中で宣言され、skelton.cppというファイルの中で(そのメンバ関数が)定義されているのがわかるでしょう。それが、このふたつのファイルのポイントなのです。その他にたくさんあるぐじゃぐじゃしたコードに悩まないでください。まず、本質をつかむところからはじめましょう。
実は、skelton.cppにはおまけがあって、クラスCAboutDlgも定義されています。それから、CMainFrameですが、これはMainFrm.h、MainFrm.cppに書いてあります。CSkeltonViewはskeltonView.hとskeltonView.cppに書いてあります。CSkeltonDocはskeltonDoc.hとskeltonDoc.cppにあります。
なああんだ。CAboutDlgを除くと、C何々というクラスは、同じ名前の.hファイル(ヘッダーファイル)と.cppファイル(ソースファイル)に書いてあるんだと気が付いたら、上出来です。CAboutDlgだけ例外なのは、このクラスはそれほど重要ではないからです。(たぶん)
そろそろ、頭が痛くなったかもしれませんが、もう少しがまんしてください。実は、StdAfx.hとStdAfx.cppは「C++入門」の #include <iostream.h> に相当する部分で、はじめは気にする必要の無いおまじないです。(つまり、MFCに必要な情報を読み込むのに使われているだけで、プログラマがいじる部分はあまり無い、ということです。)うそだと思ったら、これらのファイルを読んで見てください。たぶん、ファイルのほとんどが#include文だと思います。resource.hとresource.rc、それにリソースファイルのことは後で説明しますが、絶対必要というものでもないのです。(普通はあるのですが。)
さて以上をまとめると、AppWizardが作ってくれたファイルには、4つの重要なクラスが書き込まれている、それはCMainFrame、CSkeltonApp、CSkeltonDoc、CSkeltonViewの4つで、それぞれ対応するファイルに宣言や定義が書かれているということです。ということは、この4つのクラスがわかれば、AppWizradが作ってくれたファイルの本質が理解できたことになるのです。たったの4つです。あとは簡単じゃないですか。
ここでちょっと注意です。たくさん出てきたSkelton(skelton)という文字は何かということです。これは、最初にプロジェクト名をskeltonと決めたため、この単語をAppWizardが(自動でファイルを生成するときに)使ったのです。プロジェクト名が変われば、クラス名、ファイル名ももちろん変わります。ただ、ここではskeltonで考えることにしましょう。
ここでやめたら怒ります?怒りますよね。でもすみません、もう、10KBも書いているのです。しかも、文字ばっかり。今回はここまでにさせてください。この続きは次回にします。プリンタとお金と時間のある人はこのプロジェクトの全ファイルを打ち出して、通学通勤の途中にでも眺めていてください。知らないことだらけなんですから、わからないのは当然で、落ち込んだりはしないでください。そうではなくて、暗号を解読する探偵にでもなったような気分で、知っている言葉を探してみて欲しいのです。(特に、上記の4つのクラス名には赤丸でもつけてみてください。)私の経験では、こういう作業は決して無駄にならないと思います。(実は、私には最高の勉強方法なんですよ。^^;)
目次のページ
前のページ
後のページ