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

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

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


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

『じゃ、次のお便り』
「今週は１通も来てないよ」
『じゃあなんで〈次のお便り〉なの？』
「火美ちゃんが言ったんでしょーが」
『２８４０人以上の人が読んでるのに、全然送られてこないって不思議よ
ねー』
「そういえばさ、金菜先輩のホームページの」
『却下！』
「まだ何も言ってないのに……」
『私たちは KAB-studio.h や #pragma twice についてのご意見ご希望ご感想
を切望しています！！』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
「のページで送ってください」
『お待ちしてまーす！』


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

・辞書の単語受け付けをお休み。
　プログラミング辞書の単語受付を１２月末までお休みします。理由は「か
なゆ〜のお休みについて」を読んでね。


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

１９９９年９月１２日（日）：
　myShade でレンダリングしてたら５時間もかかったとゆー話。3DCG の道
は険しいらしいです。

１９９９年９月１３日（月）：
　自己満足コーナー、ヒット数の話が中心。んでもホームページ作ってる人
には意外と参考になる？　意外なページが意外と人気ないんです（泣）。

１９９９年９月１４日（火）：
　新たなツッコマーの登場に不穏当な雰囲気を醸し出す常連層。今ここに新
たな死闘の幕開けが！（ありません）

１９９９年９月１５日（水）：
　松坂すばらしいっす！　とゆーいつものと、あとツッコミｘ２。ここに来
てツッコミが大盛況です。ふぅ。

１９９９年９月１６日（木）：
　来週から実験が始まります。……実験……嫌だー離してくれーまだ死にた
くないー！！

１９９９年９月１７日（金）：
　祝１０万ヒット兼１０月表紙を公開とその解説。あとやっぱ金曜はアニ
メ、特にメダロットです。

１９９９年９月１８日（土）：
　コミックスやビデオテープや野球やゾイドの話。いつも通りですね。



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

１９９９年９月１２日（日）：
ＫＴＬについて
イベントハンドラの「デリゲート方式」
「発生するイベント」と「呼び出してもらう関数」を登録
イベントが発生したら対応する関数を呼び出す
問題が山積み
動的な処理
メンバ関数では難しい
イベント毎に引数を変えることができない

１９９９年９月１３日（月）：
お便り
マルチスレッド
関数ポインタの型
メンバ関数はダメ
引数の渡し方
お便り
アイテムＩＤリストの処理
IEnumIDList::Next() で取得したものはフルパスを示すものじゃない
「フルパス」をくっつければいい

１９９９年９月１４日（火）：
お便り
ＤＬＬ内での new
ポインタの返し方
解放もＤＬＬで
お便り
画像フォーマットの変換方法
事前に変換したほうがいい
お便り
ＤＬＬのファイルサイズ
デバッグビルドとリリースビルド
リリースなら５０ｋｂ以下

１９９９年９月１５日（水）：
ＫＴＬについて
イベントハンドラの「多重継承オーバーライド方式」
サンプルコード
使用例
ハンドラクラスを基底クラスに持ち、オーバーライドする
ハンドラクラスをチェーン
サンプルコード
ハンドラクラス
特殊な分岐とハンドラ関数の呼び出し
サンプルコード
チェーンを行う基底クラス
この方法のいいところは、全部ハンドラを作らなくていいという点
デメリットは、チェーンでチェックしていくことがべたな方法
お便り
昨日のお便りについて

１９９９年９月１６日（木）：
お休みについてのお知らせ
２４日から１２月末までお休み
ＫＴＬについて
イベントハンドラに問題
メニューやボタンのＩＤだとうまくいかない
多重継承で同名関数をオーバーライドするとひとつにまとめられる
サンプルコード
定数値のテンプレート引数を使用
定数にＩＤを使えばそれだけ別のクラスが作れる
サンプルコード
お便り
ini ファイルのフルパス指定
CWinApp::m_pszProfileName を変える
サンプルコード
お便り
プラグインと画像フォーマット
Susie のプラグイン
透明度は大変

１９９９年９月１７日（金）：
ＫＴＬについて
なぜＫＴＬはテンプレートライブラリを採用したか
３つのライブラリの種類
スタティックリンクライブラリとダイナミックリンクライブラリ(DLL)
理由：テンプレートとしての特殊な機能を利用したかったから
他のふたつが不採用の理由：配布が面倒
ＫＴＬの資料として試した他のライブラリは面倒なものが多かった
ＫＴＬでは面倒な部分を極力取り除きたかった
お便り
ini ファイルのフルパス指定がうまくいった

１９９９年９月１８日（土）：
ＫＴＬについて
ブラッシュアップの経過
だいたい終わった
残ってるのは……
古い方式を採っている部分を新しいものに書き換える
ホームページの書き直しと各ヘッダーファイルに書き込む「使い方」
サンプルプログラムの作成
古いクラスやファイルを削除すべきかどうか
ＫＴＬの更新日は２７日
Ｃマガジンにいろいろな質問の答があった


/*                    #pragma twice                        */


　Version 2.13
いろんな関数！


「前回の最後でこのプログラムを試してもらったんだけど……」

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

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

『ビルドエラーが出たよ』
「というわけで、実は Test() の中では MessageBox() は呼び出せないので
す。ってことは、どういうことだと思う？」
『……このまえの話の続きで考えると、 MessageBox() が、なんかのクラス
っていうのの、メンバ関数っていうのだから？』
「大当たり！」
『でも変よ。っていうか、 MessageBox() なんてメンバ関数、 CCalcDlg の
中にないんだから、CCalcDlg::OnBEqual() の中では呼べるってことが変な
のよ』
「その気持ちはごもっとも。そこで、クラスの〈継承〉ってことについてま
ず知っておきましょう」
『けいしょー？』
「そう。 CalcDlg.h の CCalcDlg クラスの部分、こんなふうになってたで
しょ」

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

『うん』
「ここで重要なのは : public CDialog の部分。これがあると〈このクラス
は CDialog クラスのメンバ関数も使えますよー〉って意味になります」
『ってことは、 CCalcDlg が持ってるの以外にも、 CDialog のメンバ関数
も使えるってことなんだ』
「そういうこと。ちなみにたいがいのクラスは最初に C が付いてるから」
『あ、これで見分けるのね』
「じゃあ、 CDialog がどんなメンバ関数を持っているのか調べてみようか」
『どうやって？』
「前に MessageBox() を調べたときと同じ方法」
『あ、そっか、ＭＳＤＮってヤツで調べるのね』
　マウスカーソルが CDialog をダブルクリックし選択状態にする。そして
Ｆ１キー。ＭＳＤＮが開き「該当するトピック」ダイアログが表示される。
『どれ？』
「タイトルが〈 CDialog 〉で、場所が〈 Microsoft (略) リファレンス〉
って書いてあるの」
『これ見分けるのってどうすればいーの？』
「まず〈場所〉が日本語のもの。あとはタイトルが一番シンプルなのかな。
ちなみに〈 CDialog クラス メンバ〉っていうのはメンバ関数一覧だから、
これでもいいんだけどね」
『でもとりあえずは〈 CDialog 〉っと』
　CDialog というタイトルに続き、階段のようなイラスト。その後に続く解
説。
『なんかいっぱい書いてあるね……』
「暇があったら読んでもいいけど、それよりは、分かりやすい解説書とかの
方を勧めるかな」
『まーねー、オフィシャルの解説なんてねー』
「で、まず下の方見て欲しいかな。こんなふうに書いてあるでしょ」

#include <afxwin.h>

クラス メンバ |  基本クラス |  階層図

『あ、 #include だって。この afxwin.h に、CDialog のこととか書いてあ
るんだ』
「そういうこと。だから afxwin.h をインクルードすれば使えるってこと」
『してたの？』
「もちろんね。今度見るけど、 stdafx.h ってファイルでインクルードして
るから」
『ふーん』
「じゃ、今度は〈クラス メンバ〉を見てみようか」
『はーい、クリック！』
　〈 CDialog クラス メンバ〉というタイトル。その下に並ぶ単語。
『これって……メンバ関数？』
「そう。とりあえずなんか見てみれば？」
　Create を選ぶ。CDialog::Create というタイトルのページが表示され、
前に見た MessageBox() の時のような、引数や戻り値の説明が書かれてい
る。
『でも読んでも分かんない……他の見よっと。〈戻る〉でメンバ関数一覧に
来て……あれ？　なんでメンバ関数一覧に MessageBox() がないの？』
「それは CDialog のメンバ関数じゃないから」
『へ？』
「もひとつ戻ってみて」
『 CDialog の解説のページだよね』
「そう。このページの最初に、こんなふうに書かれてるでしょ」

CObject
  CCmdTarget
    CWnd
      CDialog

『うん。なんなのこれ』
「たとえば下ふたつは、こういうふうになってるってこと」

class CDialog : public CWnd

『あれ？　さっきのと比べてみると……』

class CCalcDlg : public CDialog

『も、もしかして……』
「つまり、CDialog は CWnd のメンバ関数が使えるってこと」
『で、さらに CWnd は CCmdTarget のが使えて、 CCmdTarget は CObject 
のが使えて、……で、 CCalcDlg はそれまでのがぜーんぶ使えるってことな
の？』
「そういうことなのです」
『……なんか嫌な予感するんだけど……』
「それは的中するでしょう。今のページの下の方に、〈基本クラス〉ってい
うののリンクがあるでしょ」
『 public のあとのクラスを、基本クラスってゆーのね。ってことは CWnd 
クラスなんだ』
　【基本クラス】をクリックすると、

CWnd

CObject
  CCmdTarget
    CWnd

『で、メンバ関数っと』
　下の【クラス メンバ】をクリックする。「CWnd クラス メンバ」のペー
ジに表示される、膨大なメンバ関数！
『ああああああ……』
「大丈夫だって、別にこれ全部憶える必要なんてないんだから」
『ホント？』
「少なくとも僕は憶えてない」
『おじいちゃんが言ってた。〈少なくても僕は〉とかって言い回し、信用さ
れてる人なら決め台詞だけど、そうでないんなら〈あーそれで？〉ってだけ
だって』
「うっ」
『ま、いーけどねー……あ、 MessageBox() あった』
「このメンバ関数を呼び出してたってことだね」
『ふーん』
「ちなみに……この一番下に〈階層図〉っていうリンクがあるでしょ」
『ぽちっと。げげ！』
　「階層図 Microsoft Foundation Class ライブラリ」というタイトルの下
に、たくさんのクラスがツリー形式で書かれている。
『も、もしかしてこれ全部クラス！？』
「そういうこと。下の方にあるクラスは、上にたどっていく途中のすべての
クラスのメンバ関数を使えるってわけ」
『クラクラきちゃう……』
「さて、こんなふうに関数やクラスをまとめたものを〈ライブラリ〉ってい
います」
『らいぶらり、って図書館って意味の？』
「そうそう。プログラムの図書館って感じかな。火美ちゃんのプログラムは、
この Microsoft Foundation Class っていうライブラリのクラスとか関数、
つまり CDialog や TRACE() を使わせてもらってたわけだ」
『そういえば、前に〈いろんなサポートがあって、プログラムは作られてる〉
なんてこと言ってたもんね』
「で、 Microsoft Foundation Class 略してＭＦＣ」
『えむえふしー、ね』
「このライブラリは、ウィンドウズ用のプログラムを作るための、一番有名
でよく使われてるライブラリ」
『へ〜』
「 Foundation 、つまり〈基礎〉になるクラスが集まってるってことだね」
『そのＭＦＣってゆーのの手助けを借りて、プログラムは作られてるってこ
となのね〜』
「そういうことになるね。当面は、このＭＦＣの使い方に慣れることが、プ
ログラミング上達の近道になるかな」
『ってことはやっぱ憶えるんじゃないの？』
「当面は、だから。少ししたらＭＦＣから離れるから」
『どういうこと？』
「そのまえに、このプログラム、試してみて」

void Test()
{
    ::MessageBox( NULL, "あいうえお", "かきくけこ", MB_OK );
}

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

『なに言ってるの、MessageBox() は CWnd ってクラスのメンバ関数なんで
しょ？　全然関係ない Test() 関数から呼び出せるわけが……あれ？　ビル
ド成功しちゃったよ？』
「さらにこれ」

void CCalcDlg::Test()
{
    MessageBox( "あいうえお" );    // ここにブレークポイント。
}

「 MessageBox() の行にブレークポイントをセットして、中に入ってみて」
『えっと、手のひらマークで赤丸付けて、実行、ここで止まったら……』
「中カッコの中に入る、みたいなアイコン」
　をクリックすると、 CWnd::MessageBox() が表示される。
『あ、これが MessageBox() の定義、なんだよね。前に一度見てるけど、今
度はちゃんと CWnd のメンバ関数なんだって分かるね』
「上達してるってことだよ？」
『……まあ、ね……。で？』
「照れてる照れてる。で、この３行目に、こんなのがあるでしょ」

int nResult = ::MessageBox(GetSafeHwnd(), lpszText, lpszCaption, nType);

『あ、また MessageBox() だ……ん？』
「なんか分かる？」
『えっとまずねー、この ::MessageBox() っての、引数の数が違うじゃん。
それに、もしこれが CWnd::MessageBox() のと同じだったら、なんどもなん
ども自分を呼ぶわけだから、とまんなくなっちゃって……』
「うんうん」
『あとさっきのと比べると……たぶんメンバ関数じゃない、普通の関数で、
::MessageBox() っていうのがあるんじゃない？』
「そういうこと！　やっぱ上達してるよ！」
『やっぱしやっぱし？』
「じゃあまず、 MessageBox() をダブルクリックしてＦ１」
『はーい』
　「該当するトピック」ダイアログが表示される。
「このまえは CWnd::MessageBox() を選んだけど、今度は、タイトルが
〈 MessageBox 〉、場所が〈プラットフォーム ＳＤＫ〉を選んで」
『ぷらっとふぉーむえすでぃーけー、っと』
　MessageBox というタイトルのページが表示される。
『あ、なんか違うページ』
「実は、これがホントの〈ダイアログを表示する関数〉なんです」
『？？』
「というわけでつづく！」


/*
    Preview Next Story!
*/
『なんか、いよいよ核心に近づく感じ』
「盛り上げといてなんだけど……」
『げ！　次で……？』
「というわけで次回」
＜ Version 2.14 いろんなライブラリ！ ＞
『なんか順序、変じゃない？』
「もともとそう言ってたし」
『開き直るし……』

/*
    おまけ
*/
「// のあとに半角スペースを入れるといいってことを教えてくれた方、
ありがとう！」


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

・金菜さんの憂鬱を一時休止。
　わたくし、鏑矢正伝は実は学生で、特に後期の授業は忙しくなる予定なの
で、更新量を落とします。御了承ください。
　で、金菜さんの憂鬱を１２月末までお休みします。あと辞書の単語受け付
けもお休みします。その他の更新量もがくんと減ると思います。御了承くだ
さい。
　確実に続けるのは毎月の表紙イラスト、チョー普通な日記、KAB-studio.h
のみっつくらいです。


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

・ＫＴＬ更新！！
　お待たせいたしました！　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!!                    */


