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

    KAB-studio.h


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

    送信日： 2002/11/11(Mon) No.182
    配信数： 3600 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////


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

・KAB-studio.h 登録フォーム修正（汗）。
　ごめんなさい！！　KAB-studio.h の「まぐまぐ」側の登録フォームが古
くて登録できない状態になってました！　修正しましたのでこれからは登録
できます〜。


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

・ほとはー１話追加。
　三人合体ホットハーブに１話追加しました。……ちょっとペース遅いです
か（汗）。
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2002/11/03 (Sun)
　表紙壁紙。バンテージを巻く火美ちゃん。レイヤーを増やして、さらに桃
色を加えて、そして黒も強くして。やっとわかってきたかも？　今日はずっ
とこれ。そして「月姫」。萌え〜。

2002/11/04 (Mon)
　ずっと Ever17 。空様〜。今日はこれだけ。

2002/11/05 (Tue)
　今週はずっと「データセンター」作業。体力が奪われる。テレビは東京
ミュウミュウが良かった〜。そしてメルマガフォーム。なおしました。

2002/11/06 (Wed)
　立作業は辛い。３ｘ３ＥＹＥＳ最終巻。「秋葉様」。マクドのバリュー
セット＆カレーロール。

2002/11/07 (Thu)
　今日もデータセンター。長時間座ってられない体質。ポケモン最終回？　
「リブレット」の電池がやばい。フロッピーディスクアダプタ＋ USB って
ないですかねー。

2002/11/08 (Fri)
　テスト最終日。かなり洗い出せた。昨日の製品の代用品。「ウイイレ」対
戦。 Ever17 が予想を裏切る展開に……。

2002/11/09 (Sat)
　Ever17 コンプ。かなり良かったです！　ネタばれになるので内容が書け
ない……。つぐみと沙羅がいい感じ。リブレットは電池じゃなくて……。そ
して「バーチャ４」。


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

■　第五章　変化　−１０−

　病院の雅樹の部屋も、すでに片づけが済んでいた。雅樹はいつものぼろい
服へと着替え、わずかな手荷物をチェックしていた。
「え？　……あ、言うの忘れてたわ……」
　雅樹がばつの悪そうな顔をしているときに、三人の女性が入ってくる。
「雅樹、お客さんよ」
「朴殿、持ってきてやったぞ」
　そう言って、ゆかりは大きなゴルフバッグを部屋へと置いた。その表情
は、明らかに不機嫌そのものだった。
（すまなかった、舞。昨日言うの忘れちゃってな）
（それより、この人誰なんです？）
（いや、それがな）
「聞いているか？　商品の説明をさせてもらうぞ」
「ん？　ああ。いつものやつじゃないのか？」
「五本はそうだ。一本、新しいものを入れてある。これだ」
　ゆかりはゴルフバッグからクラブをひとつ抜き取り、カバーを外した。そ
こにあったのは、紛れもなく刀そのものだった。ゆかりがそれを放り投げ雅
樹が取るのを見ている間、本物なのかどうかと舞は考えていた。
　その考えの答は、抜き放たれた刀身を見れば一目瞭然だった。本当に何で
も斬れそうな、触るものすべてを斬り裂いて止まない、そういう意思を強く
感じさせる刀だった。
「これ、雅樹が使うの？」
「ああ。で、これのどこが新しいんだ？」
「刀身に窒化ケイ素を使っている」
「ちっかけいそ？」
「俗にセラミックスと呼ばれるものだ。斬れ味鋭く、錆、刃こぼれなし。さ
らに、超高温にも耐える。朴殿の蒼炎にも耐える」
「マジかよ……」
「じゃぁな、確かに渡したぞ。金はいつもの所にな」
　とだけ言って、ゆかりは部屋を出て行ってしまった。乱暴に閉めたドアが
再び開いた。
「あの人、どんな人なんです？」
「稀代の刀鍛冶さ。でもよ、今じゃなんか目を付けられてるみたいで、なに
かってーと高い刀売りつけやがる。銃刀法違反とかでぼったくってくるか
ら、今回六本で四百万だ」
「……」
　そんな値段付ける方も付ける方なら、買う方も買う方だと舞は思った。
「それ、貸してもらえます？」
「気を付けろよ」
　リシュネは刀を左手で受け取る。右前腕の腹を少し見つめたあと、その場
所を壁へと打ち付ける。肉のぷにぷにした部分とは思えない硬質な音が返っ
てくる。
　その部分を、刀で薙いだ。血が噴き出した。血の滴る刀を見ながら、リ
シュネは言った。
「この刀、すごい……」
　慌てふためく舞の側で雅樹は言った。
「ま、ここが病院で良かったな」
「良くないっ！！」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「……登録フォームが古かったなんて……」
『だからずっと、購読登録数が増えなかったんじゃないの？』
「それはかなりあるかも。でも」
『でもはなーし！！』
「それもそうだね。これからはちゃんと注意します」
『ホントー？』
「う”」
『今回は教えてくれたんだよね』
「そう、読者の方が。これからもできれば、どんどん指摘してください」
『って言っても、 Codian が指摘しても直らない状況じゃ……』
「ぅ”っ……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 10.04
メッセージループ！

「前回はメッセージループのコードを紹介したところで終わりました」
『とりあえずビルドして実行！　お、ちゃんと動く！　ウィンドウも閉じ
る！』
「というわけで、 MFC を使わない場合はここまで書かないとウィンドウを
作ることができないわけです」
『……無茶苦茶めんどいね』
「ま、実際には MFC 使うことの方が多いからあんまり気にしなくていいん
だけど、それでも一応、この辺の仕組みは理解しておかないと」
『 MFC の仕組みがわからない？』
「そゆこと。さて、では前回のコードを踏まえて、ひとつひとつ見ていきま
す。まずは WinMain() から」
『最後に１行だけ』

    return MessageLoop();

『ってしたんだよね』
「そう。 WinMain() でウィンドウクラスの登録をして、ウィンドウを作っ
て、その最後で」
『これで return してるってことは、この MessageLoop() って関数から
戻ってきたら、もうアプリが終わるってことだよね』
「そう。後で説明するけど、この関数、あ、 API だけど、これはウィンド
ウが閉じたときに戻るようになってます。だから、ウィンドウが閉じても
アプリを終了させたくないときは」
『ここを変えればいいわけだ』
「こういう、かなり根本の部分まで触れるのが、 MFC を使わないでプログ
ラムを組むときのメリットかな」
『その分、かなり面倒だけどね……』
「さて、ではその MessageLoop() の中身について見ていきます。まず、最
初にこういう構造体を用意してます」

    MSG stMsg;

「 MSG 構造体、この中にはメッセージの情報がそのまま入ってます」
『かなりそのまんまね』
「次は while ループ」
『 1 が入ってるって事は、無限ループ？』
「そう、中の if にひっからない限りずーっと回り続けます」
『ずーっと……』
「このループが【メッセージループ】の本体です」
『あ、メッセージのループだからメッセージループ……』
「このメッセージループでは、まず最初に」

        bRes = GetMessage( &stMsg, NULL, 0, 0 );

「でメッセージを取り出します」
『メッセージを……取り出す？』
「アプリを実行すると、アプリの中に【メッセージキュー】と呼ばれるもの
が作られます」
『めっせーじきゅー？？？』
「 Queue っていうのは順番待ちの列のこと。このメッセージキューには、
メッセージが順番通りに列を作って並ぶんです」
『？？？』
「たとえば、マウスを動かしたときのメッセージはなんだった？」
『えっと、 WM_MOUSEMOVE 』
「そう、だからマウスを動かすと、メッセージキューに WM_MOUSEMOVE メッ
セージがひとつ入れられます」

[メッセージキュー]
WM_MOUSEMOVE

「続いて、マウスの左ボタンを押したときは？」
『 WM_LBUTTONDOWN 』
「だから、今度は WM_LBUTTONDOWN がメッセージキューに入れられます」

[メッセージキュー]
WM_MOUSEMOVE
WM_LBUTTONDOWN

「同じく、ボタンを上げた時は」
『 WM_LBUTTONUP が入るんだ』

[メッセージキュー]
WM_MOUSEMOVE
WM_LBUTTONDOWN
WM_LBUTTONUP

『メッセージがどんどん貯まってくわけね』
「そう、取り出されない限りメッセージはメッセージキューの中に入ったま
ま。順番を守って行儀良く待ってます」
『取り出す……？　ウィンドウプロシージャに行くんじゃないの？』
「そう、実はウィンドウプロシージャへは手動で送られるんです」
『しゅ、手動？』
「手動ってのはちょっと変か。プログラムとして作る必要があるってこと。
さっきの」

        // メッセージをキューから取り出します。
        bRes = GetMessage( &stMsg, NULL, 0, 0 );

「で、まずメッセージをひとつ取り出します。取り出すのは、一番最初に
キューに入ったメッセージ。だから、さっきのだと」
『 WM_MOUSEMOVE ！』
「ということになります。 GetMessage() を呼ぶと、このメッセージの情報
が stMsg の中に入れられてきます」
『メッセージの情報……お！　MSG のリファレンスに wParam や lParam が
ある！　ってことは、これでマウスの位置がわかる！』
「 Version 8.08 ( No.150 ) でやったね」
『ここでメッセージを取り出したときに、もうそういう情報も一緒に取って
来ちゃうわけねー』
「で、取り出されたからメッセージキューは」

[メッセージキュー]
WM_LBUTTONDOWN
WM_LBUTTONUP

「ってなります」
『 WM_MOUSEMOVE はなくなっちゃったわけね』
「で、そのあとの if と」

        // メッセージを変換します。
        TranslateMessage( &stMsg );

「は後回し」
『あらま』
「直接は関係ないところだから。で、」

        // ウィンドウプロシージャに送ります。
        DispatchMessage( &stMsg );

「の部分が重要。この DispatchMessage() にさっき取り出したメッセージ
を渡すと、適切なウィンドウプロシージャに送ってくれます」
『適切って？』
「実は、メッセージキューにはそのアプリの中のいろんなウィンドウのメッ
セージがごちゃまぜになって送られてくるんです」
『げ！　なにそれ！』
「そのまま処理するともう大変だから、 DispatchMessage() に渡して、実
際にメッセージを受け取るべきウィンドウプロシージャに送ってもらうんで
す」
『で、このメッセージは Version 10.03 ( No.181 ) のウィンドウプロシー
ジャに送られてくるわけね』
「そういうこと。具体的に言えば、 WndProc() が呼び出されて、その引数
に、 stMsg に入ってる値が渡される、ってことだけどね」
『ほー』
「で、 DispatchMessage() は、ウィンドウプロシージャでの処理が終わる
まで待ってます」
『ってことは、ひとつのメッセージが処理されてる間は、メッセージループ
は止まってるんだ』
「そゆこと。処理中なのにどんどんメッセージを取ってったら大変だから
ね」
『ウィンドウプロシージャから抜けると DispatchMessage() に戻ってき
て……あ、ループだから最初に戻るんだ』
「で、またメッセージを取ってきて、っていうのをずーっと続けるわけで
す。つまりメッセージループは」

１： GetMessage() でメッセージキューからメッセージを取り出す。
２： DispatchMessage() でウィンドウプロシージャに送る。
３：ウィンドウプロシージャでメッセージを処理する。
４：処理が終わると DispatchMessage() から返ってくる。
５：繰り返し。

『これが永久ループ、メッセージループなわけなのねー。でもずーっとじゃ
ないんでしょ？』
「もちろん。それじゃアプリが終了しないからね。その辺はこの部分」

        if    ( 
                ( bRes == 0 )
            || 
                ( bRes == -1 )
            )
        {
            // 終了するのでループから抜けます。
            break;
        }

『 bRes は GetMessage() の戻り値ね』
「 -1 が帰ってきたときは GetMessage() がエラーの時。でもまずないか
な。それよりも 0 の時。これは、メッセージキューから取り出したメッ
セージが WM_QUIT の時だった場合」
『なに、このメッセージ』
「これは終了時のメッセージ。あとで詳しく説明するから簡単にだけど、
ウィンドウプロシージャの中に」

        PostQuitMessage( 0 );

「ってあるでしょ。この API を呼ぶと WM_QUIT が送られるんです」
『つまり PostQuitMessage() を呼べば GetMessage() が 0 を返す』
「結果的にはね。ちなみに PostQuitMessage() はウィンドウが閉じたとき
に呼ぶようにしてます」
『ウィンドウが閉じたときに GetMessage() が 0 を返す』
「で、この if を見れば分かるように 0 の時には break するから」
『あ、メッセージループから抜ける、ってことはアプリが終了する！』
「そゆこと。つまり」
『ウィンドウを閉じるとアプリが終了する』
「という仕組みになってるわけです」
『……ちょっと整理するね』

１：ウィンドウを閉じる。
２： PostQuitMessage() を呼ぶ。
３： WM_QUIT が送られる。
４： GetMessage() がそれを取り出すと 0 が返ってくる。
５： 0 が返ってくると if に引っかかってループから抜ける。
６：メッセージループから抜けるとアプリが終了する。

『……複雑……』
「逆に言うと、この流れをひとつでも絶ち切っちゃうと、もうそこでアプリ
は終了しなくなっちゃいます」
『たとえば…… PostQuitMessage() を呼ばないようにしたり？』
「そゆこと。あ、最後に MessageLoop() の最後で」

    return stMsg.wParam;

『これはメッセージループから抜けたときの戻り値で、……これが 
WinMain() の戻り値にもなってるんだよね』
「 WinMain() の戻り値については Version 8.05 ( No.147 ) を参照。で、
じゃあこの wParam を返してるのはどんな意味があるのか、ってことは次回
に持ち越し」

/*
    Preview Next Story!
*/
『次回は前にほっぽっといたウィンドウプロシージャね』
「 API だけだと、最初に作らなきゃいけないのが多くて……」
『だから細かい部分が後回しなわけね』
「かといって MFC がいいわけでもないんだけど」
『自分が作ってないってだけだものね』
「というわけで次回」
＜ Version 10.05 デフォルトウィンドウプロシージャ ＞
『につづく！』
「ま、どっちがいいかっていうのは微妙かもねー」
『げ、じゃあ MFC から始めたのって良くなかったの？』
「……」
『げっ』


////////////////////////////////////////////////////////////////////
/*                ２００２年１１月１８日（月）の更新              */
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 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

