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

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

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

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

「じゃ、次のお便り」
『どっかに住んでる匿名希望さんから。〈バックナンバーをまとめて送って
欲しい！〉だって』
「たしかにまぐまぐのだと、巡回アプリとか使わないときついかな」
『そこで！　幻の０号から今回の２０号までをひとまとめ！』
http://www2.justnet.ne.jp/~kabstudio/Freeware/start.html#MailMagazine
『からダウンロードしてね』
「これからも１０号ずつくらいでまとめていく予定です」
『かぶスタでは皆さんのご意見ご希望ご感想をお待ちしてます！　宛先は』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
「のページで送ってください」
『お待ちしてまーす！』


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

・「ようこそ」をリニューアル！！
　ようこそＫＡＢ−ｓｔｕｄｉｏへ！をリニューアル！　世界イントロダク
ションページコンテストで準優勝を取れるとさえ噂されるほどの出来映えで
す、たぶん。ちなみに総ファイルサイズもすごいです（汗）。むー。

・「プログラミング辞書」を移動。
　いままでＣｏｄｉａｎにあった「プログラミング辞書」を分離、ひとつの
コンテンツにしました。でもそれだけ（汗）。

・「作者について」を更新。
　作者についてを更新しました。基本事項の体重と体脂肪率を現状のものに
変更、５０問５０答に食べ物関係を追加、装備に新キーボードとmyShadeを
追加しました。


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

・リンクを追加。
　リンク集にリンクを追加しました。日記の常連さん、かおるうさんの「か
おるうの心の部屋」です。僕が描いたＣＧもあったりします。

・ＣＧを追加。
　ＣＧギャラリーにＣＧを２枚追加！
　１枚はかおるうの心の部屋へのギフトＣＧ。作者初のギフトＣＧです。も
う１枚は初の３ＤＣＧ作品。とりあえず見たってください。

・KAB-studio.h のアーカイブ登場。
　KAB-studio.h の０号から２０号までをひとつにまとめた縮刷版が登場！
　#pragma twice の縮刷版もあります。ダウンロードはフリーウェアイン
フォメーションルームにて。

・Ｃｏｄｉａｎオフライン版を更新。
　Ｃｏｄｉａｎをすべてまとめた「オフライン版」を更新しました。ちなみ
に「辞書」は入っていません。ダウンロードはフリーウェアインフォメー
ションルームにて。



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

１９９９年８月８日（日）：
　誰もが目指す道とゆう「最強のようこそ」。その道へ踏み込んだ男のおも
しろおかしい道程が今始まる！！

１９９９年８月９日（月）：
　うてなのさいほうそうはみませんでした。まる。

１９９９年８月１０日（火）：
　眠い上に書くことがない。それで日記が成り立つであろうか！！　なり
たっちゃうし。

１９９９年８月１１日（水）：
　父上の薬を取りに行ったりしてヘロヘロ。だから特に何もしてないの。

１９９９年８月１２日（木）：
　西武ＶＳダイエー戦を見てまいりました！！　西武ドームちゃちー！　松
坂スゲー！！　そして西武の勝利！　いやはや、これが野球ですね。

１９９９年８月１３日（金）：
　さて問題。「！？」と「？！」はどう違う？　どっちを使うべき？　答は
本文の中で！

１９９９年８月１４日（土）：
　今年もやってきましたワールドＰＣエキスポの季節！　去年はこのときオ
フミみたいなことしたんだけど、今年はパスっぽい（汗）。かぶヘッダーの
読者の皆さんはどー思います？

１９９９年８月１５日（日）：
　「最強のようこそ」が今完成！　そして初のＣＧギフト！　ああ、今僕は
ＣＧ描きへの階段を上ります……。

１９９９年８月１６日（月）：
　んで昨日のＣＧについて。現在試行錯誤中。歯垢削除じゃなくてよ。

１９９９年８月１７日（火）：
　摩耶っち誕生！　そしてエゴグラムの結果に驚愕！！　我が人生を真っ向
から否定するその結果とは！！

１９９９年８月１８日（水）：
　パソコンに詳しい友人が購入の手引きをするの図。ヒット数２３０。そし
て流行りだすエゴグラム。ってゆーか流行に鈍感すぎかも……。

１９９９年８月１９日（木）：
　さらにエゴグラム。ちなみに URL は
http://www.taisei-e.co.jp/seikaku/index.shtml です。君も流行に乗り遅
れる前にぜひ！！

１９９９年８月２０日（金）：
　やっぱし金曜はアニメ見なきゃね。そのほか、作者のダメダメぶりがたっ
ぷり。

１９９９年８月２１日（土）：
　3DCG、それは嘆美な響き。でもできた作品はちゃちい。そんなもんね。


/*                    金菜さんの憂鬱                        */

１９９９年８月８日（日）：
STL について
関数オブジェクトを使うものしかないアルゴリズム
std::generate() 、 std::for_each() 、 std::transform() のみっつ
サンプルコード
std::for_each() は関数オブジェクトに配列の各要素を渡すアルゴリズム
サンプルコード
意味の分かりにくいループを意味の分かる「アルゴリズム」に置き換える
お便り
タイマーとアニメーション
WM_TIMER の性質
マルチメディアタイマー

１９９９年８月９日（月）：
STL について
std::find() 
サンプルコード
イテレーター
++ や != などの演算子が使えるもののこと
お便り
valarray のエラー
Win32 のマクロが原因
お便り
昨日のタイマーについて
インラインアセンブラを使った方法

１９９９年８月１０日（火）：
STL について
サンプルコード
CString の配列用のイテレーター
サンプルコード
std::find() の時と同じ
クラスイテレーターはアルゴリズムと対象物の仲介役になれる
お便り
無制限のUndo 
これって結構難しい
Command パターン
「オリジナル」と現在までのコマンドのリストあればいいけど……

１９９９年８月１１日（水）：
STL について
サンプルコード
CStringArray 用イテレーター
サンプルコード
これも std::find() の時と同じ

１９９９年８月１２日（木）：
STL について
サンプルコード
ウィンドウ検索イテレーター
サンプルコード
お便り
ビットマップボタンとコントロールバー

１９９９年８月１３日（金）：
STL について
サンプルコード
コンテナ
お便り
昨日の続き
CDialogBar はダイアログクラスじゃない
サンプルコード
お便り
フックについて
サンプルコード
最初は簡単なのから

１９９９年８月１４日（土）：
STL について
サンプルコード
std::string 
CString との違い
サンプルコード
アルゴリズムとの連携
細かい部分がちょっと違う

１９９９年８月１５日（日）：
STL について
まとめ
ＳＴＬの根幹は「アルゴリズム」
単純なループを意味のある関数「アルゴリズム」に置き換えることができる
「関数オブジェクト」と「イテレーター」のサポート

１９９９年８月１６日（月）：
リクエストお待ちしてます
キャストについて
サンプルコード
変換機能の呼び出し
サンプルコード
無理矢理の変換

１９９９年８月１７日（火）：
Ｃ＋＋の「キャスト演算子」
static_cast 、 const_cast 、 reinterpret_cast 、 dynamic_cast 
キャスト演算子は「限定されたキャスト」をすることができる
const_cast 
「 const 型へのポインタか参照を普通のポインタか参照にキャストする」
サンプルコード
const を剥がす
ポインタか参照でないとダメ
使い方

１９９９年８月１８日（水）：
キャストについて
reinterpret_cast
「ポインタから他のポインタへのキャスト」や
「ポインタから整数値へのキャスト」ができる
サンプルコード
キャストできる範囲が広い
一番使っちゃいけないもの
const_cast でできることは reinterpret_cast ではできない

１９９９年８月１９日（木）：
キャストについて
static_cast 
const_cast と reinterpret_cast でできること以外のキャストができる
サンプルコード
一番安全なキャスト演算子
static_cast と const_cast 、reinterpret_cast を使い分ける
メリット
キャストの意味が分かる
検索しやすい
間違ったキャストをしてもコンパイラがチェックしてくれる
デメリット
古いコンパイラで使えない
コードの量が増える
Ｃスタイルのキャストは force_cast で

１９９９年８月２０日（金）：
キャストについて
継承関係のポインタのキャスト
サンプルコード
子クラスへのポインタは親クラスへのポインタへと格納できる
ポリモーフィズム
サンプルコード
親クラスへのポインタを子クラスのポインタに入れることは許されない
サンプルコード
子＞親＞子はコンパイルエラー
ランタイムで「キャストしていいかどうか」調べなくちゃいけない
お便り
うまくいきそう

１９９９年８月２１日（土）：
キャストについて
dynamic_cast
サンプルコード
「親から子」へのキャスト
「子から親、それを子に戻す」のはＯＫ
「親から子」の間違ったキャストは NULL を返す
dynamic_cast は一種の関数として機能する
typeid なんて演算子もある
お便り
ファイルのアイコンの取得がボトルネック
シェルエクステンションを使うべき
ITEMIDLIST 、システムイメージリスト、マルチスレッド


/*                    #pragma twice                        */


　Version 2.9
縦横無尽！

「えっと、これまでに見てきたのは……」
『繰り返す while と、ばあいわけする if だよ』
「じつは、このふたつがあれば十分。だから、憶えるの面倒だったらこのふ
たつだけでいいよ」
『とか言って、他の人が書いたプログラム読むときどうするのーなんて言う
んでしょ』
「ま、ね。でも結局は while と if の派生って感じだから、大丈夫だと思
うよ。まずは do-while を見てみようか」

void CCalcDlg::OnBEqual() 
{
    do
    {
        TRACE( "do - while の中です。\n" );
    }while( 0 );
}

『あ、 while が後ろに来てる。えっと、ビルドして実行っと』

do - while の中です。

『あ、１度だけ表示された』
「 while は最初にチェックしてたけど、 do - while は中カッコを実行し
たあとにチェックします。だから、かならず一度は中カッコの中が実行され
るってわけ」
『だから１度だけってことね』
「そ。ちなみにそれ以外は while と同じ。ゼロならやめて、それ以外なら
繰り返す、ってこと」
『使い道は？』
「とりあえず１度は実行させたいとき」
『まんまね』
「ま、これは while や if と見た目がかなり違うから、個人的には好き
じゃないけどね。じゃ、次、 for を見てみようか」
『ぱっぱ行くね』
「これはどんなプログラム？」

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 1;
    while( iBox < 6 )
    {
        TRACE( "%d ", iBox );
        ++iBox;
    }
}

『えっとねー、まず iBox って変数作って、それに１入れて、で、while の
チェック、……』
「iBox が６より少ないなら iBox < 6 は１になる、１だと」
『中カッコの中を実行。中に入って、まず１を表示して、１増やして２にし
て、上に戻って while のチェック、まだ６より少ないからふたたび中カッ
コの中に……で、５を表示して、１増やして６、今度は iBox < 6 がゼロに
なるから、これで終了。ってことは、１から５まで表示ってことね』
「はい正解。お疲れさま」
『まーねー』
「で、プログラムを作るときにはこういう〈単純な繰り返し〉をよくするか
ら、 while じゃなく for っていうので繰り返せるようになってます」
『ふぉー？』

void CCalcDlg::OnBEqual() 
{
    for( int iBox = 1; iBox < 6; ++iBox )
    {
        TRACE( "%d ", iBox );
    }
}

『ビルドして実行。あ、結果同じ！』
「この for を使ったのと、さっきの while はまったく同じ意味だから。for
を分解すると……」

    for( 
        int iBox = 1;     //while の前。
        iBox < 6;         //while の小カッコの中。
        ++iBox )        //一周して while に戻る直前。

『while のときに長々と書いててたのが、１行に詰まったってことなのね』
「そういうこと。ただ繰り返しをするときには、for の方がいいかな」
『なんで？』
「変数の関係かな。 iBox は繰り返しの計算に使ってるわけでしょ。それが
while だと、変数を作るのも、１増やすのも別々だから」
『for なら１行にまとまってるものね』
「そういうこと。じゃ、最後に switch について」
『すいっち、ね』

void CCalcDlg::OnBEqual() 
{
    int iBox = 1;
    
    switch( iBox )
    {
    case 0:
        TRACE( "ゼロです。\n" );
        break;
    case 1:
        TRACE( "１です。\n" );
        break;
    default:
        TRACE( "それ以外です。\n" );
        break;
    }
}

『ビルドして実行』

１です。

『あ、これは if に似てるの？』
「そう。 switch は、小カッコの中の数字を調べて、中カッコの中の case 
の数字に同じのがあるかどうか調べて、あったらそこに飛んで実行。なかっ
たら default に飛びます」
『case が else if 、 default が else と同じってことね』
「だいたいそうなんだけど、まったくおなじってわけでもないんだよね」

void CCalcDlg::OnBEqual() 
{
    int iBox = 0;
    
    switch( iBox )
    {
    case iBox:    //エラー！
        TRACE( "おなじです。\n" );
        break;
    default:
        TRACE( "ちがいます。\n" );
        break;
    }
}

『あれ？　ビルドしたらエラー出たよ？』
「if と違って、 switch は〈数字〉としか比べられないんだわ。変数とは
比較できないってわけ」
『へ〜』
「それに、 if のときは < とか != とか使っていろんな比較ができたで
しょ。でも switch はそれもできないんだわ」
『自由度低いってことね。あ、そういえばさ、 break ってなに？』
「そうそう、break も必要なんだよね。これ試してみて」

void CCalcDlg::OnBEqual() 
{
    int iBox = 1;
    
    switch( iBox )
    {
    case 0:
        TRACE( "ゼロです。\n" );
    case 1:
        TRACE( "１です。\n" );
    default:
        TRACE( "それ以外です。\n" );
    }
}

『ビルドして実行っと』
１です。
それ以外です。
『あれれ？　if だったら〈それ以外です〉はないよね』
「そう。 switch はその辺を自動的にはしてくれないんだよね。だから、
case 1 を実行したあと、その他のをよけたりはしてくれません。そこで、 
break っていうのを使います」
『ぶれーく、ね』
「これは while、 do-while 、 for 、 switch の中カッコからひとつ外へ
抜け出てくれます。だから、こんな使い方もできたり」

void CCalcDlg::OnBEqual() 
{
    int iBox
        = 0;

    while( 1 )
    {
        ++iBox;
        TRACE( "%d\n", iBox );
        if( iBox == 5 )
        {
            break;
        }
    }
}

『あれ？　while ってゼロ以外だとループするんでしょ？　これじゃ終わん
ないじゃん』
「そ。こういうのを〈無限ループ〉っていいます。で、このループから抜け
るのに break を使ってるわけ」
『？？　えっと、なんどもループさせて、 i が５になったら if の次の行
が実行されて、で、 break で…… if の外へ？』
「ううん、 break は if には効かないから、このときは while の外に出る
ことになるわけ」
『あ、だから繰り返しがちゃんと止まるんだ。……でもこれって do-while
と一緒じゃない？』
「ま、そうだけどね。ま、見やすさの違いかな」
『 do-while が嫌いだから、こっちを使うってこと』
「ま、そんなとこかな。で！」
『で？』
「これまで出てきた〈繰り返しや分岐〉をするものの中で、使うのは if 、 
for、 while のみっつで十分だから」
『 if で分岐、for と while で繰り返しってことね』
「そういうこと」



/*
    Preview Next Story!
*/
『下積みっていつまで〜？』
「あと２回くらいかな」
『え？　結構すぐだね』
「そこまで行けば、色々できるようになるから」
『というわけで次回』
＜ Version 2.10 関数を作ろう！ ＞
「につづく！！」
『色々ってどんな？（ワクワク）』
「……いやっ、実は何もできないんだよ、ホント……」
『水希ちゃん、あたしの目を見て言ってみな〜？』




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

・未定（爆）。
　またかっ！

・２６日（木）、２７日（金）：日記お休み。
　今月の２６日（木）と２７日（金）は、作者旅行のため、毎日更新してい
る金菜さんの憂鬱とチョー普通な日記をお休みします。御了承ください。
　ちなみに、帰宅は２８日（土）なので、この日の更新は遅れるかも。とり
あえず次の月曜の更新は滞りなく行う予定。未定だけど（爆）。


/*                        ご注意！！                        */

・このメールを返信しないでください。
・感想は下のページから送ってください。
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!!                    */


