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

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

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


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

「お便り、全然来ないなー」
『もしかして誰も読んでないんじゃない？』
「ギク」
『登録したけどつまんないんでほっぽいてるとか』
「そ、そんなことはないと……おもう……」
『かぶスタでは皆さんのご意見ご希望ご感想をお待ちしてます！　宛先は』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
『のページで送ってね。待ってまーす！』
「もしかして全然不満がないとか！」
『それは絶対ない』


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

・リンクを追加。
　リンク集にリンクを追加しました。日記の常連さん、尺八朗さんの「尺八
郎の尺八楼」です。プログラミング関係の読み物とか結構いい感じなんで
行ってみては。


・表紙を９月バージョンに！
　毎月恒例、新しい表紙です！
　今回は結構いい感じに描けたと思うんですが、どうでしょね。これが「男
性読者サービス」のラストイラストです（爆）。
　このイラストの詳細はチョー９月３日をご覧ください。



/*                チョー普通な日記                */

１９９９年８月２９日（日）：
　旅行中の出来事を一気に振り返る！　駒ヶ岳や妻籠、石川郷などすんばら
しい場所目白押し！　そんな感じ。

１９９９年８月３０日（月）：
　かぶスタってメールとかあんま来ない。ってことは「メールおくんなバリ
ア」とか出てます？　とかゆーくだらない話。

１９９９年８月３１日（火）：
　風邪ひいちゃった感じ。あとかなゆ〜の未来について。

１９９９年９月１日（水）：
　引き続きかなゆ〜の未来について。将来、かなゆ〜は乗っ取られる？

１９９９年９月２日（木）：
　松坂スゲェ！　って話。

１９９９年９月３日（金）：
　９月表紙完成！！　今回はかなりそさげかもよ？　あとやっぱ金曜はアニ
メの話。

１９９９年９月４日（土）：
　ワールドＰＣエキスポが待ち遠しい！　とか、ゾイドは……とか、GTK+
 for Win32 とか、まーいつも通りいろいろ。



/*                    金菜さんの憂鬱                        */


１９９９年８月２９日（日）：
長期休業の知らせ
９月末から１２月末までお休みの予定
テンプレートについて
「クラステンプレートとスタティック関数の組み合わせ」
サンプルコード
クラステンプレートと関数テンプレートの良さを組み合わせる
お便り
エディットボックスの文字色の変更
CWnd* をチェックすればいい
サンプルコード

１９９９年８月３０日（月）：
ＫＴＬについて
引数や戻り値はチェックされる
それをクラステンプレートの引数にすればいい
サンプルコード
インクルードせずに済む
オーバーロードが難しい
サンプルコード
こんなテンプレートの使い方は推奨しない

１９９９年８月３１日（火）：
ＫＴＬについて
インスタンスハンドル
お便り
エディットボックスの文字色の変更がうまくいった
お便り
ファイル名の一覧の取得について
まどかぶのソースコード
まどかぶの例外発生について
ＩＥのバージョンによるものらしい

１９９９年９月１日（水）：
ＫＴＬについて
目指すのは「マルチシェルライブラリ」
インスタンスハンドルを明示的に格納してもらうようにはしない
グローバル変数を使っていない
関数と static 変数を使用
これでグローバル変数の問題点を解決できる

１９９９年９月２日（木）：
ＫＴＬについて
ウィンドウ管理
単なるラッパー
マニピュレータークラス
HWND への参照を受け取って、そのハンドルに対して操作する
必要なだけクラスをくっつけられる
自分の望む機能だけを持つクラスを作り上げられる
変なエラー
コンパイラのバグ？
サンプルコード

１９９９年９月３日（金）：
昨日の変なエラーの解決方法
サンプルコード
ＫＴＬについて
ハンドル
ポインタを通してオブジェクトを操作する。
変数の動的生成と同じ
スマートポインタ以上の機能が求められる
変数と実体が乖離する危険性
他のシェルライブラリで問題が出てくる
ハンドル関係のクラスはとりあえず放っておく

１９９９年９月４日（土）：
ＫＴＬについて
ウィンドウクラス
この「枠組み」を元にして作成する
ほとんどのプロパティはあとから自由に変えられる
隠蔽すべきかどうか
自分でクラスライブラリを作ってみる
お便り
VCでデータベースを印刷
ＭＳＤＮのチュートリアル


/*                    #pragma twice                        */

　Version 2.11
関数を使おう！


「さて今回は、関数の使い方」
『って、この前作ったのに、使い方なんて楽勝じゃない？』
「それは逆。自分で作った関数だから使えたんで、人が作った関数はどう？」
『確かに、あたしが作ったレシピあげても、誰も料理作んないのよねー』
「……そういえば最近、金菜先輩を見かけない……」
『で、使い方って？』
「そうだね、まずは MessageBox() を使ってみようか」

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお" );
}

『これって、確かダイアログ表示するんだよね』
「そ。で、この関数の使い方を調べてみましょう」
『調べるって？』
「まず MessageBox の上でダブルクリックして」
『はい、ダブルクリック』
「そしたらＦ１キー」
『Ｆ１キー……あれ？』
　新しくアプリケーションが立ち上がる。〈MSDN ライブラリ Visual C++ 
6.0〉というウィンドウ名。さらに〈該当するトピック〉というダイアログ
が表示される。
「この中の CWnd::MessageBox() をダブルクリックしてみて」
『ダブルクリックっと』
　〈MSDN ライブラリ〉に文章が表示される。CWnd::MessageBox と書かれて
いる。
『これが、 MessageBox() の情報？』
「そういうこと。このアプリは〈ＭＳＤＮ〉って言って、プログラミングに
ついてのいろんな情報が詰まってるんだよ」
『だからこの関数のことも載ってるってことなんだ。……でも、見ても全然
わかんないよ』
「もちろん。これから見方を紹介するから。えっと、こんなふうに書いてあ
るでしょ」

int                                         //戻り値。
    MessageBox                                //関数名。
        ( LPCTSTR lpszText                    //引数１。
        , LPCTSTR lpszCaption = NULL        //引数２。
        , UINT nType = MB_OK );                //引数３。

「これは〈この関数をどういうふうに使えるのか〉ってことを表してます」
『使い方マニュアルみたいな？』
「そういうこと。これと、さっきの〈使用例〉を見比べてみようか」

    MessageBox( "あいうえお" );

『なんとなく分かるけど……えっと、質問』
「はい、火美ちゃん」
『戻り値、受け取らなくていいの？』
「うん、いいの。前回の Test() のときもね」
『引数の LPCTSTR ってなに？』
「〈文字列〉を入れる変数だよーっていう意味。とりあえず暗記してね」
『だから "あいうえお" っていう文字列を渡せるんだ』
「ちなみにこの LPCTSTR とか int とかを〈型〉っていいます。だからいつ
もの iBox は〈int 型の変数〉ってことだね」
『ふーん。でさ、引数、数合わないけど？』
「実は引数は〈省略〉できるんです。だからこの前の関数を」

int Test( int iBox = 0 )
{
    return iBox + 1;
}

「みたいにすると……」
『 = 0 が付いてるね』

void CCalcDlg::OnBEqual() 
{
    int iBox
        = Test();    //引数なし。
    TRACE( "戻り値は %d です。\n", iBox );
    //    戻り値は 1 です。
}

「みたいに、引数を省略できます。もちろん引数を付けてもいいんだよ」
『省略したら、上のなら０が入ってるってことね』
「そ。こういうのを〈デフォルト引数〉っていいます」
『まんまね〜。じゃ、MessageBox() の２番目の引数、つけていい？』
「うん、やってみ？」
『……引数２つ付けるときって、どうすればいいんだっけ』
「〈 , 〉だよ。TRACE() で使ってるでしょ」
『あ、そうだった。２番目の引数の……かた、も、LPCTSTR だから、文字列
を渡すってことで、ってことは、こう？』

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

『ビルドして実行っと。あ！』
　いつもの小さなダイアログが表示されるが、今度はタイトルが「かきくけ
こ」になっている。
『よーするに、ひとつめが中の文で、ふたつめがタイトルってことなのねー』
「ここで、ＭＳＤＮの方、見返してみようか」
『あ、そっか、ちゃんとこっちに〈２番目の引数はタイトルの文字です〉み
たいなことが書いてあるのねきっと。えっと、〈引数〉の……？』
「第２引数は lpszCaption だったでしょ。そこのとこ読んでみ」
『あ、引数の変数の名前で見るんだ。えっと……』

（ＭＳＤＮからの引用）
lpszCaption

メッセージ ボックスのキャプションとして使われる CString または NULL 
で終わる文字列を指します。lpszCaption が NULL の場合は、デフォルトの
キャプションである "Error" が使われます。
（ＭＳＤＮからの引用　ここまで）

『いまいち分かんない……用語の違いはいいけど、これ見ても "あいうえお"
渡してってこと、分かんないなー』
「ここでは〈NULL で終わる文字列〉がその意味だから。だから、これが出
てきたら "あいうえお" を渡せるよってしちゃえばたいがい大丈夫だから」
『なーんかしっくりこないなー』
「確かにねー。ただね、この辺には勉強しなきゃいけない部分がいっぱいあ
るんだわ」
『げげ』
「分かればしっくりくるんだけどね。とりあえず、今は我慢」
『はーい。ところでさ、 NULL ってなに？』
「これは〈ぬる〉って読んで、ようするに〈何もない文字列〉ってとこかな」
『そういえば、省略されてるときにこれが渡されてるね……って、あれ？』
「どうしたの？」

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", NULL );
}

『ビルドしてじっこー！』
　ダイアログが表示される。タイトルは「CALC」。
『これウソツキ！！　 Error なんて表示されないじゃん！』
「あ、ホントだ……ま、実際のところ、ドキュメントは信じないで、自分で
試した方がいいってことかな」
『変なの〜』
「しょうがないよ、プログラマーはドキュメントに振り回される生き物だか
ら……」
『なに黄昏ちゃってるのよ』
「じゃーさ、第３引数、なに渡せばいいのかわかる？」
『え……えっと、このウソツキによるとですねー、内容と動作を指定するそ
うです。何かを渡すことで。……なに渡せばいーんだろーね』
「ま、そーゆーことだね。ちなみに渡せるのは、〈メッセージボックス ス
タイル〉のページに書いてあるの」
『あ、リンク張ってあるね』
「 MB_OK とか書かれてるでしょ」
『あ、これ省略された時に渡されてるのだ』
「代わりに MB_ICONQUESTION を渡してみようか」
『はーい』

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", MB_ICONQUESTION );
}

「あ」
『ビルドして実行！　あれ？　エラー出ちゃったよ？』
「引数は、真ん中だけ省略するってことはできないの。だから第２引数も
ちゃんと書かなきゃダメ」
『めんどー。まあいいけどー』

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ", MB_ICONQUESTION );
}

『ビルドして実行、っと。あ！』
　ダイアログの左側に〈？〉というマークが表示されている。
『へー、ここ変えるだけでこんなふうになるんだー』
「他にもいっぱいあるでしょ」
『あ、ちゃんと MB_ICONQUESTION は疑問符を表示する、って書いてあるね。
あと MB_ICONSTOP とか……』
「そうだ、 MB_YESNO 試してみ？」

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ", MB_YESNO );
}

『ビルドして実行っと。あ、ボタンがふたつ！』
　表示されたダイアログには「はい」と「いいえ」のふたつのボタンが表示
されている。
「このときの関数の戻り値は何かな？」
『え……えっと、どうするんだっけ』
「じゃ、問題」
『げー。えっとねー、まず変数に受け取るのよね……受け取っちゃえば、あ
とは TRACE() で表示すればいいんだから』

void CCalcDlg::OnBEqual() 
{
    int iBox
        = MessageBox( "あいうえお", "かきくけこ", MB_YESNO );
    TRACE( "%d\n", iBox );
}

『ビルドして実行。あれ、７だって』
「〈はい〉を選んだら？」
『あ、６！　へ〜、選んだボタンで戻り値が変わるんだ』
「そういうこと。これと if で、簡単なアドベンチャーゲームとか作れるで
しょ」
『あ、作れる作れる！！　なんか……なんかすごい！』
「ここまで下積みしてきて良かったでしょ」
『うんうん！　あれ、でもさ、さっきのアイコンと、このボタンふたつ、一
緒にできないの？』
「そういうときには、〈 | 〉を使います」
『なに、これ』
「￥マークの上、ＢＳキーの左のね」

void CCalcDlg::OnBEqual() 
{
    MessageBox( "あいうえお", "かきくけこ"
                , MB_YESNO | MB_ICONQUESTION );
}

「って感じにすると、一緒に渡せるから」
『へ〜……また分かんなくなっちゃった』
「簡単にまとめれば、引数と戻り値の〈型〉をチェックするのが最優先」
『int だったら int の変数、 LPCTSTR なら文字、みたいな？』
「そう。っていっても最初はそこら辺が難しいんだけどね」
『あと NULL とか | とかも使ったね』
「そんなとこかな。ちょっと難しいけど、どう？」
『うん、難しいけど、関数は面白いかも！』
「ちなみに、関数は昔〈函数〉って書いたんだよね」
『はこだてーって感じ』
「そう、それ！！」
『な、なに？』
「数学のもそうなんだけど、関数って〈データを渡して、処理をして、数字
を返す〉っていうもので」
『MessageBox() なら、タイトルとか渡して、ダイアログ表示して、数字を
返す、ってとこねー』
「そういうのを昔の人は〈数字の出てくる、中身の見えない箱〉に例えたわ
け。で、昔は箱を函って書いたから」
『だから函数？』
「そ。色々あって字体が変わったときに、函が関になっちゃったんだよね」
『確かに、ダイアログ自体、箱って感じするし、箱があって、ボタン押すと、
数字が出てくる……自動販売機みたい』
「実際そんな感じかな。今日は勉強になった？」
『うん！』
「ちなみに今の〈函数〉の逸話はウソです」
『なんですと！？』


/*
    Preview Next Story!
*/
「Function に似た音の漢字を当てて〈函数〉、ってのがホント」
『う、ウソつかれちゃうし』
「でも関数のこと、もう忘れないでしょ」
『ま〜、そーだけどさー』
「というわけで次回」
＜ Version 2.12 ソースファイルとヘッダーファイル ＞
『につづく！！』
「うわ、イタメールが！」
『……』
「うわ、フリーズした！」
『……』
「うわ、レポートが！！」
『……（ニヤリ）』



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

・未定（汗）。
　もーしかしたら、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!!                    */


