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

    KAB-studio.h


    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2004/03/15(Mon) No.248
    配信数： 2390 ( Mag2 + Pubzine )
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００４年３月１５日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはーのつくりかた 「3. セリフ」追加！
　ほとはーのつくりかたに「3.セリフ」を追加しました。
　セリフを入れるのなんて簡単……と思いきや、フキダシの描き方からして
結構複雑です。その辺を解説。
[ ほとはーのつくりかた ]
http://www.kab-studio.biz/Comic/HotHerbMaking/index.html


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.biz/nikki2/index.html

2004/03/07 (Sun)
　午前中にいっぱいアマゾンから届く。タイムレンジャーＤＶＤが面白い。
ぱにぽにドラマＣＤも良かった。 TVBOX2 も購入。微妙……。金遣い荒い。
ほとはーのつくりかたのテキスト量。氷が溶けて血に変わるまでがかなり良
かった。不安定な職業へ？　そして月２００時間。

2004/03/08 (Mon)
　CLANNAD 受付開始メール。速攻受付。体調最悪。なんか色々と手間取る。
ＤＶＤデッキご不在連絡。正義の味方。そして飛ばされた人と隔離された人
と残された人。

2004/03/09 (Tue)
　調子いい。７時半に上がって DVR-710H-S を受け取る。画質いい。 
TVBOX2 はやっぱあんま。テレビどうしよう。何をＤＶＤに残すか考えよ
う。

2004/03/10 (Wed)
　わけわかんない機能の解析とかバグ取りとか。無駄。帰ってからもメー
ル。ほとはーのつくりかたのヒット数がいまいち（爆）。そしてＰＣ向け液
晶テレビ。

2004/03/11 (Thu)
　NullPointerException が出たらそれを追って。データベースがいくつも
あって。歯がヤバい。そして YahooBB ５００円。

2004/03/12 (Fri)
　がこがことデバッグ作業。仮監督責任者。イノセンス観る予定が潰れる。
家帰ってからも色々と。仕事中も眠い。スッキリットを１日１個消費。体動
かして眠気覚まし。エレキコミック落ちる……。今晩と明日。

2004/03/13 (Sat)
　午前中は横浜へ。そのあと派遣先へ。さらに午後からいつもの勤務地へ。
体調最悪。眠すぎる。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第八章　朱と碧　−１３−

　朝霧に包まれたその空間は、舞に懐かしさを思い出させる。
　純粋に、懐かしいと感じられる、こと。
「今なら、泉に戻ってもこんな気分でいられるかも」
　そう独り言をいいつつ、のびをした。
「結白殿」
　霧の中から赤葉が現れる。
「赤葉様、おはようございます」
「うむ。……おぬしに、見てもらいたいものがある」
「はい」
　赤葉と共に、地下の泉へと下る。日の光が入らない泉は、昨日の風景と変
わらない。
　昨日の話を思い出す……そっか、同じ泉だから、違和感も消えたん
だ……。
　泉の中心、炎が猛るその中央に二人は立つ。
「？」
　赤葉はそこまで来て、何も言わず、ただ立つのみ。
　舞はその真意を計りかねて、手持ちぶさたにまわりを見回した。ただ盛る
だけの炎。泉が作り出す、炎ではない炎。
「……あ、」
　違和感。
　炎の中……いや、もうすでに炎とは感じられていないその空間に、異物、
人工の力を見て取る。
「これ……なんだろう」
　目に見えないそれは、固形物、確固たる形を持ったものを感じさせる。
無機的な有機物、甲殻のような感触。
「侵入者だ」
　舞は振り向き赤葉を見る。そして、再びその違和感を注視する。
　触っているのか、触られているのか、その『力』そのものを舞は感じ取
る。
「リシュネ達に似てる……ＡＰかな……でもリシュネでも、あの少年でも、
あの男でもない。会ったことのないＡＰ」
　そして、直感的に言い切った。
「敵だ」
                                                              (続く)

////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 13.12
コレクションを使ってみよう

「バリエーションの最後として、今回は配列以外のものを使ってみます」
『配列以外？』
「配列には〈サイズを変えられない〉〈サイズがわからない〉などのデメ
リットがあります。そこで、配列の機能を持ったクラスが作られました」
『それが配列以外のものってことね』
「そう。一般には【コレクション】って呼ばれます」
『コレクションって、集めるとかゆー意味の？』
「そのコレクション。コレクションには色々な種類があるんだけど、とりあ
えず MFC にある CString 専用コレクション CStringArray を紹介します」

void Use_CStringArray()
{
    CStringArray cStrAry;
    cStrAry.Add( "CCC" );
    cStrAry.Add( "BBB" );
    cStrAry.Add( "AAA" );
    cStrAry.Add( "EEE" );
    cStrAry.Add( "DDD" );

    for( int iF1 = 0; iF1 < cStrAry.GetSize(); ++iF1 )
    {
        TRACE( "%s ", cStrAry.GetAt( iF1 ) );
    }
    TRACE( "\n" );
    // CCC BBB AAA EEE DDD 
}

『 Add() ってメンバ関数で追加して、 GetSize() ってメンバ関数で数が取
得できるのね』
「このふたつが配列との違い、かな。データを削除することもできるから」
『で、 GetAt() でデータを取り出すわけね。この CStringArray を使う
と、ソートするときにいいことあるの？』
「あんまりない」
『え”』
「前も言ったように、ソートはサイズは変わらないから、データの追加や削
除は特に必要ないんです。サイズ取得が便利っていうくらいかな」
『じゃあ使う意味ないんじゃ……』
「でも、ソートを使う側は便利だと思うよ。 Version 13.10 ( No.246 ) の
この例と比べてみて」

    const char *ppchAry[5];
    ppchAry[0] = "CCC";
    ppchAry[1] = "BBB";
    ppchAry[2] = "AAA";
    ppchAry[3] = "EEE";
    ppchAry[4] = "DDD";

「 "CCC" とかは【文字列リテラル】、 Version 5.06 ( No.071 ) で説明し
たようにメモリ上に置かれた文字列。でも、普通ソートするのって普通の文
字列でしょ」
『そうだね』
「そうなると、数とかサイズ普通可変だから」
『 CString が使えて、しかも追加できる CStringArray の方が便利……』
「そういうこと。では、 CStringArray を使う場合のソートの例」

// p_pchL > p_pchR なら true を、
// それ以外は false を返すようにしてください。
bool CompareTo( const char *p_pchL, const char *p_pchR )
{
    if( strcmp( p_pchL, p_pchR ) > 0 )
    {
        return true;
    }

    return false;
}

void DoBubbleSortToCStringArray( CStringArray &p_rcStrAry )
{
    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_rcStrAry.GetSize() - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_rcStrAry.GetSize() - 1; iOut < iIn; iIn-- )
        {
            if( CompareTo
                    ( p_rcStrAry.GetAt( iIn - 1 )
                    , p_rcStrAry.GetAt( iIn )
                    )
                == true )
            {
                // 前の方が大きいので入れ替えます。
                CString cTempStr = p_rcStrAry.GetAt( iIn );
                p_rcStrAry.SetAt( iIn, p_rcStrAry.GetAt( iIn - 1 ) );
                p_rcStrAry.SetAt( iIn - 1, cTempStr );
            }
        }
    }
}

「使用例はこんな感じ」

void Use_DoBubbleSortToCStringArray()
{
    CStringArray cStrAry;
    cStrAry.Add( "CCC" );
    cStrAry.Add( "BBB" );
    cStrAry.Add( "AAA" );
    cStrAry.Add( "EEE" );
    cStrAry.Add( "DDD" );

    // ソートします。
    DoBubbleSortToCStringArray( cStrAry );

    for( int iF1 = 0; iF1 < cStrAry.GetSize(); ++iF1 )
    {
        TRACE( "%s ", cStrAry.GetAt( iF1 ) );
    }
    TRACE( "\n" );
    // AAA BBB CCC DDD EEE 
}

『使用例はさっきとほとんど同じね』
「ソートの部分もほとんど同じ。違うところは、まず引数にサイズを渡して
ない点」
『サイズは GetSize() で取得できるんだものね』
「だから、ソートの部分もこう変わります」

    // 「入れ替え先」のループです。
    for( int iOut = 0; iOut < p_rcStrAry.GetSize() - 1; iOut++ )
    {
        // 最後から先頭方向へのループです。
        // ただし「入れ替え先」までです。
        for( int iIn = p_rcStrAry.GetSize() - 1; iOut < iIn; iIn-- )
        {

『あ、ここって変わらないはずなのに……』
「サイズの取得方法が変わったからね。やってることは一緒」
『うーん……』
「他も基本的には同じかな。比較関数も今までと同じだし」
『ん……質問！』
「はい火美ちゃん」
『入れ替える部分がよくわかんない』

                CString cTempStr = p_rcStrAry.GetAt( iIn );
                p_rcStrAry.SetAt( iIn, p_rcStrAry.GetAt( iIn - 1 ) );
                p_rcStrAry.SetAt( iIn - 1, cTempStr );

「基本的には、配列の時と同じ。 CStringArray::GetAt() でデータを取得
して、 CStringArray::SetAt() でデータをセット。 SetAt() は第１引数が
インデックスナンバー、第２引数がセットする値」

                p_rcStrAry.SetAt( iIn, p_rcStrAry.GetAt( iIn - 1 ) );

「と」

                p_rcStrAry[iIn] = p_rcStrAry[iIn - 1];

「が同じってこと」
『ちょっとややこしい……』
「それは言えるかも。ちなみに」

                CString cTempStr = p_rcStrAry[iIn];
                p_rcStrAry[iIn] = p_rcStrAry[iIn - 1];
                p_rcStrAry[iIn - 1] = cTempStr;

「でも、実はできちゃいます」
『え！？　なんで配列みたいに [] が使えるの？』
「それは、演算子のオーバーロードをしてるから」
『あ、 Version 7.09 ( No.129 ) でやったやつ？』
「そう。 CStringArray は [] をオーバーロードしていて、配列のように
データを返してくれるんです」
『へー』
「まぁ実はそれだけじゃなくて、かなり複雑な仕組みだったりするんだけど
ね」
『え？』
「まぁそれはまたの機会に」
『むー。あ、そうそう、もうひとつ質問！』
「はい火美ちゃん」
『これって、 CString のコピーしてるじゃない。ポインタのコピーしてな
いんだから重くなるんじゃない？』
「それはちょっと複雑な部分だね。まず、この処理では文字列のコピーは行
われていません」
『え、そうなの？』
「 CString から CString にコピーすると、中に持っている文字列ポインタ
だけをコピーするんです」
『ってことは同じ……？　それって、ふたつの CString が同じ文字列ポイ
ンタを持つってこと？　それじゃ、一方が文字列書き換えたらもう一方も書
き換わっちゃうんじゃない？』
「その辺はちゃんとしていて、文字列の中身が変えられる時には新しく文字
列領域を確保するから」
『一緒に書き換わることはないわけね……』
「そういうこと。 CStringArray の使い方はこんな感じかな」
『え？　コレクションってこれだけ？』
「ううん、まだいっぱいあるよ。というわけで次回に続く！」

/*
    Preview Next Story!
*/
『文字列追加ってよくありそうだから、これは便利だよね』
「これを利用すればエディタとかも作れるかな」
『１行１要素みたいな？』
「そういうこと。次回のポインタ用のも使うと、さらに幅が広がるから」
『というわけで次回』
＜ Version 13.13 ポインタ用コレクション ＞
「につづく！」
『じゃあもう new しなくても大丈夫？』
「ううん、それは必要」
『げ』


////////////////////////////////////////////////////////////////////
/*                ２００４年３月２２日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはーのつくりかた 「4. 主線」追加予定
　ほとはーのつくりかたに「4.主線」を追加予定。
　いよいよ「おもせん」です。やっとマンガ講座っぽくなってきました！


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2004 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

