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

    KAB-studio.h


    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com

    送信日： 2003/01/13(Mon) No.189
    配信数： 3400 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００３年１月１３日（月）の更新                */
http://www.kab-studio.com/

・ほとはー追加なしです……。
　三人合体ホットハーブ、今週の追加はありません。ごめんなさい。代わり
にメルブラでもしててください……。


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

2003/01/05 (Sun)
　咳が止まらない。ぷらとわ２話。ほとはーはなし。代わりにぱぱっと。ご
はんは「豚汁」。どれみドッカ〜ン！とギャラクシーエンジェルがいい感
じ。対極だけど。こみパ再び。

2003/01/06 (Mon)
　風邪が酷くて初日から休む。けいゆう病院へ。かなり待って薬をもらう。
早めにブレーキ。雇用関係難しいし。ＡｉｒＨ”が少し良くなったかも。

2003/01/07 (Tue)
　熱少し下がったんで会社へ。３連休も潰れそうだし。ダイエットのために
肉を魚に白米を野菜に。 WOLF'S RAIN 気合い入りまくり。「まあやさん」
が歌ってたとは。

2003/01/08 (Wed)
　咳止まんない。お仕事は Java ばっか。昔持ってたおもちゃ。

2003/01/09 (Thu)
　風邪治らない。メルブラ遅れるそうな。「メロンブックス」。 L/R があ
んまだ……。明日はセキュアド発表日！　今年一年がこれで決まる！

2003/01/10 (Fri)
　セキュアド落ちてた（泣）。眠い中お仕事。 .hack がちょっといいか
も（爆）。転職のお誘いでもないかなぁ。

2003/01/11 (Sat)
　１１時に起きてお昼にお仕事。メルブラとカトキマウス。銀だことお刺
身。そしてセキュアドとメルブラ。


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

■　第六章　帰郷　−３−

　湯船につかりながら、俊雄は顔を赤らめていた。と言っても、そういった
要因はまったく見受けられない。なんの変哲もないその風呂は、幾分狭い石
を組み上げた風呂場で、ガラスの向こうには林が見えて狸か何か出てきそう
な雰囲気だった。混浴でもなければ、女湯の声も聞こえてこない。
　顔を赤らめる理由は、雅樹の会話だった。洗い場で体を洗う雅樹の会話
は、本当に夫婦が一緒のお風呂に入っているかのようなもので、刺激的な単
語は出ていなくても、その雰囲気は十分恥ずかしいものだった。
「ったく、おまえは便利だよなー、体洗わなくてもいつもきれいでいられて
さ。明日山ん中で汗泥まみれになるかと思うと……んなこと思ってないっ
て、俺が洗ったらおまえの珠のような肌に傷が付くってもんだ」
　そんな会話が耳に入らないように、俊雄は他のことを考える。そういえ
ば、雅樹の体は、本当に人のものかと思えるものだった。服を脱げば、機能
性を追求したとでも言うべきその体つきに目を見張ることになる。つやのあ
る肌に被われたその体は、ぜい肉の類をまったく持っていない。また、ボ
ディビルダーに見受けられるような筋肉も存在しない。だが、腕や体を曲げ
ると、思い出したように巨大な力こぶが所々から浮き出てくる。
　長い間サッカーをしてきて、自分の体もそれなりに鍛えてきたつもりだっ
た。けれども、目の前に見せつけられたその肉体は、あまりにも驚異だっ
た。
　例えこの男が力を持っていなくとも、例え舞を護るためであったとして
も、僕には、勝てない……。
　湯を頭から浴びて、雅樹が湯船へと入る。あふれ出した湯が洗い場を被っ
た。俊雄と並ぶようにして、肩までゆっくりとつかる。
「なぁ、おまえ舞のこと好きか？」
「……はい、好きです」
　唐突な問にも、俊雄は素直に答えることができた。
「俺には、穂香しか見えない。だから、俺は舞とは……ダメなんだ」
「ダメって、何がです」
「俺は特別すぎるんだ。おまえと舞なら、うまくやっていけるだろ？」
「……僕は一度、ふられてますから」
「知ってるよ」
「知って……るんですか」
「舞は力を持っている。今、その力を肯定するか否定するか悩んでいる。ホ
ントはな、力なんてものはない方がいいんだ。肯定なんてしちまうと、今ま
での人生ふいにしちまう」
「……」
「俺と一緒にいると、いつかは……俺は自分の力を肯定しているからな。だ
から、おまえが舞を引き留めなきゃいけない。力は仕方なく使うもの、そう
いう風にさせなきゃいけない」
「そのために、舞さんと付き合えって言うんですか？」
「俺は舞とは一緒になれない。だけどな、心配なんだよ」
「勝手ですよ……」
「だな」
「……」
　俊雄は湯船から出て、脱衣場へと行く。
「俺は長風呂なんだ。ゆっくりしてくからな」
　サッシが音を立てて閉まる。雅樹は、顔を洗った。
「……これで、いいんだって……」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『……ここ最近、作者、忙しそうだね』
「まぁこれでも忙しくない方って言う人もいるだろうけど」
『げ！　……そーゆーもんなの？』
「まぁ上には上がいるってことで」
『そういえば、暇なときはすごく暇だったよね』
「そういう波も激しいしね。激しくない人もいるけど」
『ってゆーかどっちー！？』
「ってゆーか……運？」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 10.11
プログラムの構造を考える

「今回はちょっと逸れて、プログラムの構造について見てみます」
『プログラムの構造？』
「そう。具体的に言うと、関数の分け方、ってところかな。えっと、まず前
回の続きから」

// メッセージループ。
int MessageLoop( HINSTANCE p_hInstance )
{
    BOOL bRes;
    MSG    stMsg;
    int iAclTranslated;

    // アクセラレーターをリソースから読み込みます。
    HACCEL hAccel
        = LoadAccelerators
            ( p_hInstance
            , MAKEINTRESOURCE( IDA_MAIN ) 
            );

    // メッセージループです。
    while( 1 )
    {
        // メッセージをキューから取り出します。
        bRes = GetMessage( &stMsg, NULL, 0, 0 );
        if    ( 
                ( bRes == 0 )
            || 
                ( bRes == -1 )
            )
        {
            // 終了するのでループから抜けます。
            break;
        }

        iAclTranslated
             = TranslateAccelerator( stMsg.hwnd, hAccel, &stMsg );
        if( iAclTranslated != FALSE )
        {
            // 変換したのでメッセージ変換とディスパッチはしません。
            continue;
        }

        // メッセージを変換します。
        TranslateMessage( &stMsg );
        // ウィンドウプロシージャに送ります。
        DispatchMessage( &stMsg );
    }

    return stMsg.wParam;
}

『この continue が初めてのだったんだよね』
「そう、まだ教えてなかったんだよね。 continue は break の親戚。 
break については Version 2.9 ( No.020 ) を読んで」
『 break に似てるの？　 continue って』
「 break は for や while から抜けるけど、 continue はそのループの次
の週に進みます。たとえば上の例だと、 continue の所に来たら」

        }

        // メッセージを変換します。
        TranslateMessage( &stMsg );
        // ウィンドウプロシージャに送ります。
        DispatchMessage( &stMsg );

「は全部飛ばして、 while の最初、つまり」

        // メッセージをキューから取り出します。

「に来ます」
『あ、ってことはアクセラレーターのをしちゃったらそれはウィンドウプロ
シージャに送られないんだ』
「 Ctrl + A とかの入力がそのまま残ってウィンドウプロシージャで処理さ
れるとまずいからね」
『なるほどねー。あれ？　でもさ、』

        // メッセージをキューから取り出します。

『のところに来るって、それって……戻るってこと？』
「うーん、 while だとそうなんだけど、 for だとちょっと違うかな。たと
えば」

    for( int iF1 = 0; iF1 < 10; iF1++ )
    {
        TRACE( "%d\n", iF1 );
        continue;
    }

「もしこれで、 continue が」

        TRACE( "%d\n", iF1 );

「に戻るとすると？」
『そっか、これだとずーっと終わらない……ホントの無限ループになっ
ちゃう』
「でも実際にはなりません。 continue は for の〈次の週〉にいくから、
ちゃんと iF1++ が効いて、 iF1 が増えていくんです」
『なるほどねー、 for だとそういう意味があるんだね』
「さて、話を少し変えて。今回の continue だけど、実際には使わないで済
ませる方法もあります。たとえば次のように」

    // メッセージループです。
    while( 1 )
    {
        // メッセージをキューから取り出します。
        bRes = GetMessage( &stMsg, NULL, 0, 0 );
        if    ( 
                ( bRes == 0 )
            || 
                ( bRes == -1 )
            )
        {
            // 終了するのでループから抜けます。
            break;
        }

        iAclTranslated
            = TranslateAccelerator( stMsg.hwnd, hAccel, &stMsg );
        if( iAclTranslated == FALSE )
        {
            // メッセージを変換します。
            TranslateMessage( &stMsg );
            // ウィンドウプロシージャに送ります。
            DispatchMessage( &stMsg );
        }
    }

『えっと、 continue のあったところに、ウィンドウプロシージャにディス
パッチするところが入ってるんだね』
「あともうひとつ、 if の条件が逆になってるでしょ」
『あ、ホントだ。さっきは != だけど今度は == になってる』
「つまり、最初は〈変換された時に中に入って continue する〉ってなって
たけど、今回のは〈変換されなかった時に中に入ってディスパッチする〉っ
てなってます」
『中と外の違いねー。で、実際に見た目以外にこれって何か違うところある
の？』
「機能としては同じだね。実際、このプログラムだけで言えばどっちもあま
り違いはないと思うよ」
『……このプログラムだけ、ってどういう意味？』
「そう、そこ。たとえば、ディスパッチ前になにかの処理が必要になって」

        if( iAclTranslated == FALSE )
        {
            // ここに２００行くらいのコード。
            // ...

            // メッセージを変換します。
            TranslateMessage( &stMsg );
            // ウィンドウプロシージャに送ります。
            DispatchMessage( &stMsg );
        }

「みたいになると」
『 if の中がすごーく長くなっちゃうね』
「 if の中がすごく長いと、 if の範囲がどこまでかとか解りづらくなるか
ら良くないかな」
『そういう時はさっきの方がいいってことね』
「基本的にはそういう事。でも逆に」

        if( iAclTranslated == FALSE )
        {
            // さっきの２００行＋ディスパッチの部分を入れた
            // Dispatcher() という関数に入れて、それを呼びます。
            Dispatcher( &stMsg );
        }

「って関数にしちゃえば」
『これならシンプルねー。って、これって別に if の外に出した時でもでき
るでしょ？』
「もちろん」
『もちろんって……』
「ここで言いたいのは、色々な方法があるよってこと」
『あー、うん、それはわかる』
「まだここでは細かいことは説明しないけど、プログラムの方法にはいろん
な方法があって、それぞれにメリットデメリットがあります」
『それはあとで教えてもらえるってことね』
「そういうこと。でも、教える前に、プログラムを組む上で〈これは本当に
最善策かな〉っていうのは意識しておいて」
『ってゆーと？』
「たとえばこの章のプログラムだと、ウィンドウプロシージャ以外は 
WinMain() の中に全部入れることもできるでしょ」
『確かに入れられるし……そういう例もよく見るね』
「でもそうなると無茶苦茶長くなっちゃうし、変数もぐちゃぐちゃになっ
ちゃう。他では使わない stWndClassEx がそのまま残ったりするから」
『だから関数を分割したわけね』
「そういうこと。こういうのはぱっと見でいいか悪いかわかる例。でも……
たとえば、前回のアクセラレーターの」

    // アクセラレーターをリソースから読み込みます。
    HACCEL hAccel
        = LoadAccelerators
            ( p_hInstance
            , MAKEINTRESOURCE( IDA_MAIN ) 
            );

「って部分。これって今はメッセージループする直前で呼んでるけど、実際
にはメッセージループとはちょっと違うから、他の関数で呼んだ方がいいか
も」
『つまり、 WinMain() とかで呼んで、 hAccel を引数にして渡すとか？』
「そういうこと。まぁ WinMain() で呼ぶのもどうかなって思うし、今ある
関数の中だと、どこで呼べばいいのかとか難しいけど」
『こういうのはぱっと見でどうすればいいかっていうのが難しい例ね』
「そういうこと。この辺はすっぱり割り切れない部分だけど、いつも気に留
めておくようにしてね」

/*
    Preview Next Story!
*/
『でもなんか、今回って煮え切らないよねー』
「実際、こういうのって掲示板で言い争いとかになるくらいだし」
『げ、そうなの？』
「だから、僕が教えるのもひとつの例ってことで」
『それって責任放棄って言わない？』
「う”……」
『というわけで次回』
＜ Version 10.12 コード全体 ＞
「につづく」
『って、次回こそ責任放棄じゃない！』
「 SDK 編はどうしてもコード量が多くなるから……」


////////////////////////////////////////////////////////////////////
/*                ２００３年１月２０日（月）の更新                */
http://www.kab-studio.com/

・ほとはー追加の予定。
　三人合体ホットハーブに１話追加予定……たぶん……。


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

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


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

    (C)KAB-studio 1999 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

