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

    KAB-studio.h


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

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

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

・１２月表紙壁紙！
　毎月恒例というわけで１２月表紙壁紙です。１２月と言ったらクリスマス
ということで……かなり普通の絵になっちゃいました（汗）。ダウンロード
は CG Gallery にて。
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/

・ほとはーに１話追加！
　三人合体ホットハーブに１話追加しました！　意外な趣味？
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


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

2002/11/24 (Sun)
　部屋の片付けやおねてぃドラマＣＤ３とか灰羽とかでのんびり。こみパの
桜井あさひに非常に共感。望まれることと、したいことのずれ……。その辺
は「休学」したことと関係してるかも。そして七之格言の続き？

2002/11/25 (Mon)
　お仕事は安定。 MVC + ビジネスロジック？　ファイアウォールを作って
みたいけどいまいちわからない。帰りにぱぶれや財布を購入。つっぱねてる
けど実は、に弱い。それ散る向けにＤＶＤドライブ購入予定。バックアップ
は考えないで。実は STL & iostream 入門は本として出版する予定だった。
ぽしゃったけど（爆）。

2002/11/26 (Tue)
　風邪っぽい。なので体温計購入。小説からかなり離れちゃった……。スク
ウェアとエニックスが合併しても……。これはやっとけゲーム。昔のゲーム
をつらつらと。今年やったのはどれもいいよ。ちゃん様シナリオ終えまし
た。かわいい（爆）。

2002/11/27 (Wed)
　完全風邪モード。派遣ってのんびりできないかなー。 Shade でモデリン
グしてそれを参考に描く。 Kanon 「フライヤー」。ぱぶれはあんまかも…
…。

2002/11/28 (Thu)
　「秀丸」で色々遊ぶ。秀丸マクロは便利。それ散るＤＶＤ版購入。 Shade 
のフェイフェイは失敗だった……。リブレット帰還。たった３営業日で修理
完了？　アメリカ版ジャンプは右閉じだった……。アクセスログがなぜか死
んでる……。

2002/11/29 (Fri)
　お仕事は急なのも含めて色々。とっとと上がって秋葉原へ。でもフライ
ヤーとかうまく探せず。ＤＶＤドライブは購入。 Ever17 の同人誌が全然な
い……やっぱり人気大事なのか？　ＤＶＤのセットアップに苦労。カスケー
ド用ケーブルじゃないし音楽鳴らないし。そして Linux なので vi 。使い
にくそう……。

2002/11/30 (Sat)
　それ散るをがーっと。雪村がいい感じ〜。終盤がちょっときついけど。主
人公に声が欲しい〜。「プラチェ」がなにげにいい感じ。そして CD-DA な
らケーブル継ながなくても鳴るはずとゆー指摘。ＤＶＤがコマ落ちする。

2002/12/01 (Sun)
　今日はかぶヘッダーも含めてお休み。なのでそれ散る三昧。希望シナリオ
で泣いてしまう。青葉ちゃんとつばさのシナリオも悪くないけど。灰羽、後
半を見逃す……。「ジャミング」。そしてＤＶＤコマ落ちは DMA がオフに
なってるからでは？

2002/12/02 (Mon)
　朝はソルパック月例会議、戻ってからは ISO9000 シリーズ向けドキュメ
ントの整理。これからは「 CMM 」だと思う。 Adobe Web Collection の
パッケージ内容がなんか違う？　それ散るコンプ。やっぱ一番は雪村。でも
希望もいいかも。男性キャラと子供達がむしろ？　あとはこみパコンプを目
指す。アクセスログがかなりやばい……。

2002/12/03 (Tue)
　かなり眠い。仕事は余裕あるけど。ライブラリの「 doxygen 」ドキュメ
ントを公開しようかな。初のコミケはコピー本でもいいかも……。それ散る
をもう一度ぱーっと。アクセスログ暫定解決。 Adobe Web Collection は今
度バージョンアップするらしい。 Kanon ＤＶＤがどこにもない……。いき
なりですが、今日から「ちょお普通な日記」になりました。

2002/12/04 (Wed)
　１２月のお仕事に大きいのが来る。夏ぐらいにやってたのの続き。 Kanon 
ＤＶＤはソフマップで買うか？　表紙壁紙とほとはーをちょっとだけ。
「飼い雪村に手を噛まれる」がなぜか好き……。日記単語の検索できます。

2002/12/05 (Thu)
　久々の残業でも結構平気。平行して走ってるのもあってそこは大変だけ
ど。「フォトショ」購入予定。秋葉様のフィギュアを予約。そして今日の一
枚はたまの一枚へ。そして灰羽連盟１時間。もう当分１時間？

2002/12/06 (Fri)
　仕事は面白いけど、あとで大変だろうなぁ。「 Java スクリプト」って難
しい。ソフマップで Kanon ＤＶＤ全巻購入……。ＣＤ１枚に３万５千円。
無敵看板娘購入。唐突に Kanon 真琴シナリオを。何度やっても泣ける。
ケータイ買い換えようかなぁ。いいのないかも……。

2002/12/07 (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.07
メッセージを待つ！

「さて、今回はちょっと重要なことを説明します」
『重要ってどのくらい』
「そうだね、他のアプリとか、あと使ってる人を困らせる可能性がある、そ
のくらい重要かな」
『つまり自分のアプリだけの問題じゃない、と』
「そういうこと。まず、 Main.cpp ファイルの最初のところ」

#include <Windows.h>
#include <stdio.h>

「っていうふうに、 stdio.h をインクルードしておいて」
『ほい』
「次に、メッセージループを」

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

    // カウンター。
    int iCounter = 0;
    // カウンターを入れる文字列。
    char pchCounter[128];

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

        // カウンターとメッセージを出力します。
        ++iCounter;
        sprintf
            ( pchCounter
            , "メッセージ : %d, %X, %X\n"
            , iCounter, stMsg.message, stMsg.hwnd 
            );
        OutputDebugString( pchCounter );

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

    return stMsg.wParam;
}

「って修正して。 while の前に変数をふたつ追加して、あと〈カウンター
と……〉ってコメントのとこのを追加して」
『この前の WM_KEYDOWN とかのは削除するんでしょ？』
「あ、そうそう。あとは、 IME を MS-IME に変えて、と……」
『何してるの？』
「ちょっと小細工。えっと、とりあえずビルドして実行して」
『ほい』
「で、出力結果は」

メッセージ : 1, 401, 1C013A
メッセージ : 2, C055, 1C013A
メッセージ : 3, C066, 1C013A
メッセージ : 4, 200, 1F0106
メッセージ : 5, F, 360120
メッセージ : 6, 113, 1C013A
メッセージ : 7, 200, 1F0106
メッセージ : 8, 200, 1F0106
メッセージ : 9, 200, 1F0106
メッセージ : 10, 200, 1F0106
メッセージ : 11, 200, 1F0106
……

「って感じになると思うんだけど、もし右から２番目の数字が 113 、つま
り」

メッセージ : 18, 113, 210106
メッセージ : 19, 113, 210106
メッセージ : 20, 113, 210106
メッセージ : 21, 113, 210106
メッセージ : 22, 113, 210106
メッセージ : 23, 113, 210106
メッセージ : 24, 113, 210106

「ってなっていた場合には、コントロールパネルの【地域のオプション】
の【入力ロケール】のページで【MS-IME】系の IME にしておいてくださ
い」
『どゆこと？』
「その辺はあとで。えっと、もう一度仕切直し。実行してみて」
『ほい。うん、さっきみたいに色々出てくるね』
「プログラムと付き合わせてみるとわかると思うけど」

メッセージ : 7, 200, 1F0106

「の数字の、１番目がメッセージのカウンター」
『つまり今までに送られてきてるメッセージの数ね』
「２番目はメッセージそのものの値。メッセージは本当は整数値で、 
Winuser.h ってファイルの中で定義されてます」
『その数字を出してるわけね』
「３番目は送り先ウィンドウハンドル」
『ウィンドウハンドル？』
「 Version 10.04 ( No.182 ) で言ったように、メッセージループにはいろ
んなウィンドウのメッセージが送られてくるんです」
『そっか、これを見ないとどのウィンドウのメッセージかわからないわけ
ね』
「そういうこと。ま、いろんなって言ってもそのアプリに関係してるメッ
セージだけだけどね。ちなみに、この辺の値を変換してる」

        sprintf
            ( pchCounter
            , "メッセージ : %d, %X, %X\n"
            , iCounter, stMsg.message, stMsg.hwnd 
            );

「については Version 5.07 ( No.072 ) を参照してください」
『数値を文字列にするってゆーのね、 TRACE() みたいなので』
「ちなみに、最初に」

#include <stdio.h>

「ってしたのはこの sprintf() を使うため。そのへんは Version 8.03 
( No.145 ) を参照してください」
『そっか、 MFC を使わないでランタイム使う時は、こういうふうにしな
きゃいけないんだ……』
「さて。ここからが本題。実行中に、何もしないでみて」
『ほい、何もしない』
「メッセージはどう？」
『送られてきてないみたい。カウンター増えてないから』
「そう、そこが重要」
『？』
「メッセージループって while のループだけど、ずーっとぐるぐる回って
るわけじゃないってこと」
『そういえば、回ってたらその度になんか出るはずだもんね』
「 GetMessage() がメッセージキューの中身を見に行って、メッセージがひ
とつも入ってないときには、メッセージがキューに入るまでずっと待つんで
す」
『あ、だから止まってるんだ』
「この機能のおかげで、アプリはなにも操作をしなければずーっと待ち状態
になってるんです」
『待ち状態？　何もせずに待ってるの？』
「そう、〈何もしてない〉っていうのがとても重要。アプリが何かをして
るってことは、その間は CPU がそのアプリの処理をしてるってこと」
『 CPU ってパソコンの頭よね、つまりアプリのことを色々してくれてるっ
てこと……そっか、それが〈してない〉ってことは、アプリのことをほっ
ぽっといてるってことね』
「放っておいてるってことは、逆に言うと他のアプリの処理をすることがで
きるってこと」
『……ちょっと待った。つまり、 CPU ってひとつのアプリしか面倒見られ
ないの？　マルチタスクって、確か』
「複数のアプリを処理できる、けど、それは CPU が同時にできるわけじゃ
なくて、まずアプリ１、次にアプリ２、アプリ３、またアプリ１、アプリ
２、っていうふうに」
『とっかえひっかえして見ていくんだ……マルチタスクって、完全に平行に
処理できるんじゃないんだね』
「今の CPU はそう。将来は改善されるだろうし、今でも CPU を複数使え
ば」
『コンピューターとしては並行処理……でも CPU はいっぺんにひとつしか
処理できないんだよね』
「だから！　Version 7.18 ( No.138 ) の時のループを思い出して」
『あ……あの時はアニメーションでループさせてて、そしたらその間は動か
したり他のアプリ使ったりできなかった……』
「ああいうふうに CPU がしっかり処理を始めちゃうと、マルチタスク環境
でも他のアプリの処理に移らないんです」
『だからずーっと固まったままなわけね。あれ？　でもそれじゃいつ他のア
プリに……あ！　そのための GetMessage() ！』
「そゆこと。メッセージが送られてきて、ウィンドウプロシージャで処理し
て、また GetMessage() に戻ってきたら、実はここで一度このアプリの処理
は休止するんです」
『あ、そうなんだ。で、他のアプリに移る？』
「そういうこと。他のアプリの処理に移ると、そこでもメッセージループで
GetMessage() でメッセージを待ってて」
『もしキューに入ってたら取り出して処理、終わったらまた他のアプリへ』
「処理が移って、っていうふうになるわけです。つまり」

１： GetMessage() メッセージを取り出す。
２： ウィンドウプロシージャで処理する。
３： ふたたび GetMessage() に戻った所で他のアプリへバトンを渡す。

「これがひとつのメッセージの処理内容。これを、今実行されてるアプリが
代わる代わるしてるんです」
『そっか、あのとき WM_TIMER を使ったのは……』
「そういうこと。メッセージを使えば、一度の処理ごとに必ずメッセージ
ループが一周するでしょ」
『それで他のアプリの処理に移ることができる……なるほどねー』
「あとは、その Version 7.18 ( No.138 ) の時の話を思い出して」
『……そっか、こういう理由だから、ああいうループはしちゃいけないんだ
ね』
「マルチタスクの仕組みを知らないと、普通にものすごく重い処理をさせ
ちゃうかもしれないけど、それは使う人にとってはすごく迷惑」
『そのために、 WM_TIRMER とかを使って、他のアプリも動けるようにする
わけねー』
「と、最後に IME のことについて」
『あ、そうそう、それそれ』
「まず、 IME って実はアプリの中に埋め込まれた形になってるんです」
『埋め込まれる？』
「そう。埋め込まれるって事は、 IME に対してのメッセージもそのアプリ
のメッセージキューに入れられるってこと」
『ってことは』

メッセージ : 18, 113, 210106

『は、その IME のメッセージ？』
「調べてみたら、 ATOK15 はタイマー、あ、 WM_TIMER って整数値だと 113 
なんだけど、それを送ってもらってるみたいで」
『なるほどねー。……試してみると、これ、かなりの数来てない？』
「たぶん 0.1 秒間隔くらいかな？」
『それじゃあ、さっきのメッセージループの意味が……』
「そんなことはない、って Version 7.18 ( No.138 ) で説明したでしょ？」
『そっか、処理する時間に比べたら 0.1 秒なんてかなり長いんだ』
「この辺の話は、実感としての時間よりも、 CPU にとっての時間を考える
ことが重要、かな」

/*
    Preview Next Story!
*/
『ってゆーか、普通に動いてたプログラムもこういう裏事情があるんだね』
「でもこういうこと知ってると」
『あ、そっか、プログラムがいきなり止まっちゃう理由とか分かるね』
「逆にプログラマーはそういう部分も気を付ける必要があるってこと」
『むー、なんかどんどん気にしなきゃいけないことが増えてない？』
「それはたぶん、減ることはないよ……」
『げ』
「というわけで次回」
＜ Version 10.08 ウィンドウクラスとアトム ＞
『につづく！』
「アトムっていうのも結構やっかいなものでねー」
『そんな、やるまえからそーゆーこと言わないでよ……』


////////////////////////////////////////////////////////////////////
/*                ２００２年１２月１６日（月）の更新              */
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
*/
////////////////////////////////////////////////////////////////////

