VC++5.0入門27
チュートリアル読書会9 98/5/31

こんにちは。1週お休みしてしまいました。すみません。

さて、みなさん、どうでしょうか?ここまで、チュートリアルを読んで、とりあえずでも実行できた人は、もう、かなりの自信がついてきているのではないでしょうか?私は、この辺まで読んで、「見切った!」(by セイ○ュウ拳、安達○実 or by ホクト○ン拳、ケンシ○ウ)と思ったものですが、、、。

一方、不安になってくる人も多いようです。こんなことをやって何になるの?何人かの人から、以下のような質問を受けています。「お絵描きプログラムは大体わかった。でも、他のプログラムの書き方はさっぱりだ。」「普通に考えられるソフトは、ワープロや表計算やゲームだけど、こういうものは、市販のものにかなうわけがない。それなら自分でプログラムをするメリットは何か?」

この講座を読んでいる人の中には、プロ予備軍の人がかなりいるようです。(上司に言われて、勉強をはじめた、、とメールをくれる人がかなりいます。)そういう人には、関係ない話ですが、趣味でやっている人はどうなんでしょう?
そういう趣味の人たち(私もどちらかというとそうです)に対する答えは、(質問者のみなさんも認めていましたが)個人が出すものであって、私が「こうだ」ということはできません。ただ、私の考えを言うと、、、たとえ市販のものにかなり見劣りするプログラムでも、自分で作ってみれば愛着もわき、自分独自のカスタマイズもでき、また、コンピュータについて学ぶこともできる、したがって、、、なんて言いません。私は、ワープロも表計算も市販のものを使います。それらをカスタマイズするには、それ用のマクロ言語を使います。コンピュータを学ぶためにプログラムをするのもいいけど、それだけじゃ、ちょっと本末転倒のような、、、。

上のような質問が頭に浮かんでくるのはまったく当然だと思います。私も最初にチュートリアルを読んでいる頃、そう思っていました。でも、今は、それは少々あせっているから、とも思うのです。
(趣味のプログラマとしての)私は、オリジナルなもので、自分でちょっとおもしろいと思えるプログラムが書きたい。それと、他人が少しくらいは感心してくれるプログラムを書くのも楽しい。「へーー。これ君が作ったの?」「あれ、これどうやったの?」なんて言われるプログラムを作りたい、、、と思っています。趣味でやっている人の多くは同じではないですか?このページの読者がそんなプログラムを作れるようになる日は遠くないと思います。ただ、(オリジナリティは別にして)プログラミングの基礎知識と経験がもう少し必要なのです。

よく考えてみれば、同僚なり、友人なり、妻(夫、恋人)なり、あるいは自分自身に、ちょっと役に立つプログラム、こんなのがあればおもしろいなというプログラムはいくらでもあります。売り出すと同時にマイク○ソフトのライバルになるようなソフトを想像しないでください。ちょっと、おもしろいな、というソフトです。それを洗練させていくと、周りの人くらいは「すごい!」と言ってくれるものになると思います。

それと、参考までに言うと、チュートリアルはお絵描きプログラムですが、よく考えると、他のプログラムに応用できるテクニックがたくさん含まれているはずです。例えば、Scribbleでは、「一筆」のデータを多数扱い、一筆は「点」のデータの集まりでした。ここで、例えば、「氏名」の集まりを「名簿」とし、「名簿」を多数扱うプログラムを考えたとすると、仕組みはScribbleに似たものになると思うのです。(メインメモリに入りきらない程のデータを扱うをデータベースソフトには別の仕組みが必要です。)いかがでしょうか?

能書きが多すぎましたか?自分は趣味でやってるんじゃないと言う人、趣味だけど、別にどんなプログラムをするかなんて勝手だと言う人、まあ、いいじゃないですか。先に進みましょう!

さて、今回は、「ダイアログボックスの追加」(から)ですね。前回までに、メニューを作って、その中に、「ペン幅...」という項目があったのに、これはまだ手つかずでした。念のために言っておくと、「...」はこれから何か起こるぞ、、、という合図ですね。「何か」というのは、普通は、ダイアログボックスが開かれて、ユーザが入力や選択をさせられる、、、ということです。
これには、まずダイアログの設計から入ります。チュートリアルでは、まず、ダイアログの簡単な説明が書いてありますから、そこを斜め読みして、すぐ「ダイアログボックスの作成」に入ってください。あとは、書いてあるとおりに進んでいけると思うのですが、どうでしょうか?
ちょっと、注意しておくとダイアログやボタンやエディットボックスにはIDと呼ばれる名前がついています。これらは、後で使われるとても重要な「名前」です。一方、キャプションというものがありますが、これは、ダイアログ(のタイトル)やボタン(の表面)に書かれる「ユーザへの説明」で、これはこれで重要ですが、プログラムの動作には影響の無い、単なる文字の列です。
また、ダイアログには、普通、はじめからIDOKIDCANCELというIDのついたボタンがついています。これはボタンだけでなく、これらのIDがあらかじめ特別に用意されているのです。したがって、これらのボタンについては、わざわざIDをつける必要はないのです。私ははじめ、これは(生意気に?)邪魔だと思っていましたが、まあ、ついているものですから、うまく利用することを考えた方が良さそうです。
チュートリアルの「タブオーダー」の説明はちょっと簡単すぎる気がしますが、実際に手を動かし、適当にクリックしてみれば、わかると思います。(タブオーダーの意味がわからない人は、適当なプログラムのダイアログボックスを開き、Tabキーを何度か押してみてください。フォーカスが動いていく順がタブオーダーです。VC入門18も参考にしてください。)
この章の本番は「クラスとダイアログボックスの対応付け」からと言って良いでしょう。ここで何をやるのかもうわかる人は理解が進んでいます。もし、よくわからなければ、ちょっと思い出してください。ダイアログなんかはリソースと呼ばれるのでした。リソースは一般に、いろいろなプログラムで使いまわしできるようにプログラムとは一応独立しています。実際、ダイアログの様式などはC++とは別の言語で記述されます。
これをC++のプログラムに取り込む必要があるわけで、これが「クラスとダイアログボックスの対応付け」なのです。実際、ダイアログをC++のプログラムに取り込むのに、当然(と私は思うのですが)、「ダイアログを表すクラス」をその「ダイアログ」に対して用意するのです。これをするのに、ウィザードバーを使うのですね。
CDialogはMFCでマイクロソフトが用意してくれたダイアログようのクラスです。我々(というかチュートリアルの作者)はこのクラスの派生クラスを作るわけですが、その名をチュートリアルは、CPenWidthsDlgとしています。
途中で出てくる「新しく作成したクラスの内容の確認」という項では、//{{AFX_などの説明があります。はじめはあまり気にしなくて良いと思います。これらはClassWizardが使うものですが、見ての通り、//で始まっているので、C++ではコメントとなり、つまりプログラムの動作とは無関係なのです。(C++コンパイラは無視する、、、ということです。ClassWizardはコンパイル前に、プログラマがコードを書く手助けをするだけです。)

能書きばかりでほとんど進んでいませんが、次回(たぶん来週^^;)に、この章を終わらせましょう。
目次のページ
前のページ
後のページ