
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp

    送信日： 1999/09/13(Mon) No.023
    配信数： 2790（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/


/*                        今週の「どう？」                    */

『きゃーっ、お便りが来たよー！　しかも２通！』
「宣伝したかいがあったね」
『と、ゆーわけでまずひとつめ、住所不明の匿名希望さんからのお便り！』

・作る環境がないので読むのは楽しいけど、それに対する
反応ができないのが悲しい毎日です。
どうか私にお金と時間と知恵と勇気を下さい。。。

すいません。ただの愚痴になってしまいました(>_<)

『そういえばそうよ、開発環境ってなんかどれも高いっぽいし』
「前にも言ったけど、プログラミングは〈試してなんぼ〉だから、あるとな
いじゃ大違いなんだよね」
『このまえＶＣとかデルファイおっこってたけど』
「そーゆーものを拾ってきちゃいけません！」
『だってあたしプログラムだから法律で罰せられないしー』
「基本的人権もないけどね」
『げげ』
「僕のお薦めはＪＡＶＡスクリプト」
『なにそれ』
「ホームページで使うプログラムなんだけど、テキストエディタとブラウザ
があればＯＫ」
『ってことは、メモ帳と、ＩＥやねすけがあればいいんだから、タダ同然っ
てことね』
「文法的にも、ＶＣで使ってるＣ＋＋にかなり似てるし、結果がすぐ出るか
ら分かりやすいし、いろんなホームページに解説が載ってるし」
『そうそう、解説書も高いよねー』
「平行してＪＡＶＡスクリプトの勉強しておけば、何もしないよりはずっと
ましだから」
『ではふたつめ、住所不明の匿名希望さんからのお便り！』

・毎週、楽しみに読ませて頂いてます。
今週のMSDNライブラリのLPCTSTR…みたいな、初心者にはヘルプを
見てもわからないってことが多々あります。
そういった説明が入ってるので、非常に解りやすいです。
毎週、首を長くして待ってます。
欲を言わしてもらえば、もう少し長く、一気に！
…とは行かないですよねぇ。

『わ、私あれ以上長くなると憶えきれないかも……』
「僕自身、あれでもちょっと長いかなと思ってたんだけど、意外とそうでも
ないのかな？」
『１週間で読み切るのには十分の量、ってことなんじゃない？』
「あと、とぎれとぎれだと分かりにくい、いっぺんに書いてある方が分かり
やすいってのもあるかも」
『ってゆーか、やっぱし憶測でもの言っちゃダメよね』
「そうだね、こういう〈ヒント〉があるおかげで色々調節できるから、こう
いう意見は大歓迎！　自分としてはこう、っていうのがあったらぜひ送って
ください」
『でもいろんな意見がありすぎて結局なんも変わらなかったりするのよねー』
「う”」
『かぶスタでは皆さんのご意見ご希望ご感想をお待ちしてます！　宛先は』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
「のページで送ってください」
『お待ちしてまーす！』


/*            １９９９年９月１３日（月）の更新                */

・#pragma twice を追加。
　 KAB-studio.h で好評連載中の#pragma twice のページを作りました。メ
ルマガでもプログラミングの記事があるんだよーっていう宣伝です（汗）。

・辞書に単語を追加。
　プログラミング辞書に単語を追加しました。ってまー毎週追加してるんで
すが、今週は結構多いんで。


////////////////////////////////////////////////////////////////
/*CM

　プログラマーも、健康第一。

http://www.t3.rim.or.jp/~umeya/

　梅屋ファーム

*/
////////////////////////////////////////////////////////////////


/*                チョー普通な日記                */
http://www2.justnet.ne.jp/~kabstudio/nikki2/

１９９９年９月５日（日）：
　松坂初リリーフ！！　と、あと日曜のテレビ。ミュージックハンマー略し
てＭＨって知ってます？　わてが思うに最高に素晴らしい音楽番組です。
ええ。

１９９９年９月６日（月）：
　げ、ゲーメストがなくなるかもしんない！？　その驚愕の事実にワールド
ＰＣエキスポを明日に控えた青年は眠れぬ夜を過ごすのだった。

１９９９年９月７日（火）：
　ワールドＰＣエキスポ詳細！！　iBook の重さからレトルトカレーまで
行った人しか分かんない情報満載！

１９９９年９月８日（水）：
　疲れてんのに古書市へ。つまり「鏑矢正伝だって男の子なんです」とゆー
話。あと……サヨナラ満塁ホームラン……。

１９９９年９月９日（木）：
　再び平和な日常。あとツッコミがふたつほど。皆さんも思うところあった
らツッコミいれてみては。

１９９９年９月１０日（金）：
　メダロットというアニメは面白いという話。ペインター欲しいなー。タブ
レット買うかなー。

１９９９年９月１１日（土）：
　占いシリーズ第２段、カバラ占いの巻。あと１０万ヒットイラスト作成中。



/*                    金菜さんの憂鬱                        */
http://www2.justnet.ne.jp/~kabstudio/Programing/KanaU/

１９９９年９月５日（日）：
ＫＴＬについて
ダイアログコントロールとのデータのやりとり
ＡＰＩはメッセージを使用
ＫＴＬでは、「プロキシークラス」を使う
ＤＤＸと同等の機能を実現
でも複雑
マップ検索やポリモーフィズムで実現
今度は違う方法を採用
お便り
VCでデータベースは難しい
C++Builder の quickreport

１９９９年９月６日（月）：
ＫＴＬについて
標準Ｃ＋＋ライブラリの「ＩＯストリーム」はとても便利
ダイアログコントロール用ストリームバッファを作成
サンプルコード
サンプルコード
「文字列と整数」の変換は全部ストリームが肩代わりしてくれる
ＤＤＸの代わりになる

１９９９年９月７日（火）：
お休み

１９９９年９月８日（水）：
ＫＴＬについて
ウィンドウプロシージャ
メンバ関数はコールバック関数にできない
static メンバ関数を使う
static メンバ関数の中に自クラスポインタ型の static 変数を用意
コンストラクタで格納

１９９９年９月９日（木）：
ＫＴＬについて
コピーコンストラクタだけ用意してデフォルトと自クラスコピーは封印
ダイアログクラスの初期化は WM_INITDIALOG が送られたとき
タイミングがずれる
ハンドルをセットし直せるように変更
お便り
関数がコンパイルできない
引数などを変えてみる

１９９９年９月１０日（金）：
ＫＴＬについて
イベント
ウィンドウプロシージャと switch 
イベント毎のメンバ関数「ハンドラ」
ＭＦＣは語るもおぞましい方法で実現
ＫＴＬでも作ったことがあったが酷かった
ＡＴＬで使ってる方法はとてもシンプルでおすすめ
マクロで switch 分岐のコードを作るだけ

１９９９年９月１１日（土）：
ＫＴＬについて
イベントハンドラ
「オーバーライド方式」はイベントハンドラをオーバーライドする
ユーザー側にとっては非常に簡単
ＫＴＬではむり
全部のメッセージに対応しなきゃいけないから


////////////////////////////////////////////////////////////////
/*CM

　キーボードの横に、パン。

http://member.nifty.ne.jp/anRosee/

　アンローゼ　パンとケーキのお店。

*/
////////////////////////////////////////////////////////////////


/*                    #pragma twice                        */

　Version 2.12
ソースファイルとヘッダーファイル

「まず、このプログラムを試してみて」

void CCalcDlg::OnBEqual() 
{
    Test();
}

void Test()
{
}
　
『ん？　いつものの……順序が逆だね』
「そういうこと」
『じゃ、ビルドして……あ、エラー。これってつまり、関数を使う前に、関
数がなきゃいけないってこと？』
「そうでもあるし、そうじゃないってことも言えるかな」
『どーゆーこと？』
「Test(); って関数を呼びだしてる部分。このとき必要なのは、関数そのも
のじゃなくて、〈どうやって関数を呼び出すか〉、つまり引数とか戻り値が
必要なの」
『それってつまり？』
「つまり、これなら大丈夫ってこと」

void Test();    //宣言。

void CCalcDlg::OnBEqual() 
{
    Test();
}

void Test()    //定義。
{
}

「まず、これまで言ってきた関数は、ホントは〈関数の定義〉っていいま
す」
『ていぎ？』
「そ。これが、いわば関数の本体。で、この関数をどこからでも呼び出せる
ように、関数名と引数、戻り値を一緒にして張り出しておいたもの、それが
〈関数の宣言〉」
『せんげん……』
「つまり〈こーゆー関数があるぞー！！　だから使え！〉って宣言してるわ
け」
『はー、なるほど。でもさ、宣言だけしといて、中身……定義だっけ、これ
がなかったら？』
「エラーが出るから」
『あ、ホントだ』
「まず〈関数は宣言と定義で１セット〉って憶えるように」
『え〜、めんどくない？　だって、定義の引数とか変えたら、宣言も変えな
きゃいけないんでしょ？』
「そうなんだけど、〈他の関数〉を使う時のための前知識ってことで」
『あっ、そっか』
「で、〈関数宣言〉は、通常〈ヘッダーファイル〉に置きます」
『ヘッダーファイル？　前にちょっと出てきたね』
「今開いてるファイルの一番上は、こんなふうになってるでしょ」

#include "stdafx.h"
#include "Calc.h"
#include "CalcDlg.h"

「この拡張子が .h のファイルが〈ヘッダーファイル〉。#include って命
令で、ヘッダーファイルを〈インクルード〉しています」
『？？？』
「えっとまず、関数宣言。これは、ヘッダーファイルに入ってます」
『うんうん』
「で、ある関数を使いたい！　そういうときは、その関数の宣言が入ってい
るヘッダーファイルを探します」
『うんうん』
「そしたらこの #include の命令でヘッダーファイルを指定します。そうす
ると、自動的に関数が使えるようになるのです！」
『おお！』
「これを〈ヘッダーファイルをインクルードする〉といいます」
『でもまだよく分かんない』
「自分でやってみれば分かるから。えっと、今見てるファイルは 
CalcDlg.cpp でしょ」
『うん、タイトルバーにそう書いてあるから、そうでしょ』
「この拡張子が .cpp のファイルを〈ソースファイル〉って言います」
『ソースってウスターとかブルドックとかの？』
「いや、それとは別物。〈ニュースソース〉と同じかな。ん、でもその辺は
あんま考えない方がいいかも」
『いい例が浮かばないだけなんじゃない？』
「ぎく。えっと、とりあえず〈ヘッダーファイルに関数宣言〉が入ってて、
〈ソースファイルに関数定義〉が入ってるって憶えればいいかな」
『えっと、どっちがどっちだっけ』
「宣言宣言」
『あ、オレを使ってくれ！　だよね』
「そうそう。で、たいがいこれはペアになってます。宣言と定義がペアなよ
うに、ヘッダーとソースもペア」
『ってことは、 CalcDlg.cpp があれば CalcDlg.h もある……あ、そういえ
ばインクルードしてるね』
「そう。というわけで、 Test() の宣言を CalcDlg.h に書いてみましょう。
CalcDlg.h を開いてみて」
『あ、前にそんなのやったね……えっと、どう見るんだっけ』
「あとあとを考えると、【表示】−【ワークスペース】を表示して」
　エディタが少し狭まり、空いた空間に【ワークスペース】ウィンドウが表
示される。
「その【FileView】のページを表示して」
　そのページにはファイルがツリー表示されている。
『この【Header Files】の中からをダブルクリックすればいい
んだよね』
　ダブルクリックして CalcDlg.h をエディタに表示する。
『ううっ、何書いてあんのかわかんない……』
「とりあえず、こう書かれてる行を探してみて」

#endif // _MSC_VER > 1000

『うん、あったよ』
「その下をリターンキー押しまくって、スペースを作っちゃって」
『て、てきとー……』
「じゃ、そこに Test() の宣言を書いちゃいましょう」
『はーい。コピー』
「あ、宣言はひとつだけじゃないとダメだから、カット＆ペーストね」
『あ、そういえばそうかもね』

#endif // _MSC_VER > 1000

void Test();    //宣言部。

『ビルドして実行！　うん、うまくいったよ』
「定義と宣言のペア、ソースとヘッダーのペア、憶えた？」
『うん、大丈夫でしょ。ソースファイルの CalcDlg.cpp で Test() を使い
たい、そこで Test() の宣言がある CalcDlg.h をインクルードしてる、
ってことだよね。……順序逆だけど』
「ま、そういうことだね。では問題」
『げげ！』
「いつも使ってるこの関数」

void CCalcDlg::OnBEqual() 
{
}

『もしかして、この関数の宣言はどこ、とか？』
「そゆこと」
『ん〜……えっとまず、セオリーでいけば、 CalcDlg.h の中にあるわけだ
けど……ん〜……あ、あっ！……違うか……』
「ん？」
『あのさ、これ、似てるけど違うよね』

    afx_msg void OnBEqual();

「はい正解」
『え、そうなの？』
「そうなんです。と、種明かしの前に〈クラス〉について簡単に説明しま
しょう」
『くらす？　教室とかの？』
「うん、そんな感じかも。 CalcDlg.h の中に、こういうのがあるでしょ」

class CCalcDlg : public CDialog
{
//    略。
};

『あ、これってどっかで……』
「これと見比べてみればわかるでしょ」

void CCalcDlg::OnBEqual() 
{
}

『あ！　CCalcDlg っていうの、同じ！』
「そう。 CCalcDlg っていうのは〈クラス〉のひとつ。クラスは言ってみれ
ば、グループみたいなもの。だから、 Test() から CCalcDlg::OnBEqual() 
は呼び出せないんだよ」
『え、ホント！？』

void Test()
{
    CCalcDlg::OnBEqual();
}

『ホントだ、エラー出ちゃった』
「Test() はどこからでも呼び出せるフツーの関数だけど、 OnBEqual() は
CCalcDlg のクラスに属する〈メンバ関数〉だから、簡単には呼び出せない
わけ」
『こういうのをメンバ関数っていうんだ。メンバってラーメンに入ってる』
「そりゃメンマや！　メンバーの方が分かりやすいかな」
『あ、クラスのメンバーの、関数ってことね』
「そういうこと。でもまだよく分かんないでしょ」
『だったら試す、でしょ？』
「そゆこと。というわけで、 Test() を CCalcDlg のメンバ関数にしちゃい
ましょう」
『おー』
「まず定義をこんなふうに書き換えます」

void CCalcDlg::Test()    //定義部。
{
}

『あ、CCalcDlg:: が〈 CCalcDlg クラスのメンバ関数だよ〉って印？』
「そういうこと。次に、宣言を CCalcDlg の中に入れちゃいましょう」
『入れるって？』
「こんな感じかな」

class CCalcDlg : public CDialog
{
    void Test();
//    略。
};

『あ、こういう意味の〈中〉、ね』
「これで Test() は、晴れて CCalcDlg のメンバ関数になりました！」
『え、もう？』
「試しに」

void CCalcDlg::Test()
{
    CCalcDlg::OnBEqual();
}

『ビルドっと。あ、成功！　すごーい！』
「でも実行しちゃダメ」
『なんで？』
「だって、 OnBEqual() と Test() で呼び合い続けて、ずーと終わらないで
しょ」
『あ、そーゆーもんなんだ』
「さて、今回は〈宣言と定義〉について見てきました」
『タイトルはソースファイルとヘッダーファイルだし、クラスってのとかメ
ンバ関数ってのも見たしね』
「宣言と定義が１セットで、宣言がヘッダーに、定義がソースに入ってるっ
てこと、忘れないようにね」
『宣言は〈関数使え！〉ってヤツ、定義が本体、ね』
「じゃ、最後にこれ」

void Test()
{
    MessageBox( "あいうえお" );    //これが……。
}

void CCalcDlg::OnBEqual() 
{
    Test();
}

『あれ、なんか元に戻ったって感じ』
「そ。ただの関数、それを呼び出してるだけ。でも……」
『あれ、ビルドするとエラーだよ？』
「というわけでつづく！」



/*
    Preview Next Story!
*/
「ソースのいい例、なんかないかな」
『でも雰囲気的には似てるよね』
「実は、今辞書引くまで別物って知らなかったり」
『なさけなー』
「う〜」
『というわけで次回』
＜ Version 2.13 いろんな関数！ ＞
「につづく！！」
『ニュースソースは news source で、トマトソースは tomato sauce ね』
「そうっす」
『びし！』
「はう！」



/*            １９９９年９月２０日（月）の更新予定                */

・未定（汗）。
　うーん、KTLのバージョンアップはまだできないかも……。そうそう、古
いクラスとかを削除するかもしれないから、古いバージョンが欲しい人は今
のうちにダウンロードしておいてね。



/*                        ご注意！！                        */

・このメールを返信しないでください。
・感想は下のページから送ってください。
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
・購読登録を解除したいときには下のページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーは下のページにあります。
http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198
http://www2.justnet.ne.jp/~kabstudio/Freeware/start.html#MailMagazine

/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                    See you next week!!                    */


