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

    KAB-studio.h


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

    送信日： 2002/03/25(Mon) No.150
    配信数： 3760 ( 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 が１５０号になったので縮刷版を更新します。ダウンロー
ドはダウンロードルームにて。
[ ダウンロードルーム ]
http://www.kab-studio.com/Freeware/index.html#MailMagazine

・リンク集更新
　リンクを更新します。 Light and Shine の引っ越し更新です。むー、小
説ページ少ないねんけど……。
[ リンクのページ ]
http://www.kab-studio.com/Info/Link/


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

2002/03/17 (Sun)
　お休みしっかり。 Maya 4 Personal Learning Edition （まやっぺ）ダウ
ンロード開始。ホットハーブ１話追加。そしてシスコのベンダー試験。

2002/03/18 (Mon)
　ずっと詳細設計書書き。スケジュール余裕あるけどギリギリ。ホットハー
ブ人気高し！　期待されてるん？

2002/03/19 (Tue)
　予定狂って検収日明日になったんでやばい。なんかお客さんには信用され
てる？　リブレット大活躍。

2002/03/20 (Wed)
　締め切り迫る！　超速制作！　しかし邪魔が！　さらに問題も！　なので
延びた（爆）。あずまんが大王最終回。まやっぺ重い。

2002/03/21 (Thu)
　CppUnit が VC5 じゃ使えない？　祭日だけど会社でドキュメント作成、
さらに客先作業。でもすぐ帰っておねがい☆ティーチャー。来週は有休取り
ます。そして AirH" カード。

2002/03/22 (Fri)
　ドキュメント作りが終わった〜。ひと段落しました。帰ったら VS.net が
来そびれてた。謎の電子音。

2002/03/23 (Sat)
　VS.net ファーストインプレッション！　いいとこもあるがなーんか VC6 
の方がいいような……。あとはのんびり。郵便局やら市役所やら。なんかお
金使いまくってるなぁ。


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

■　第三章　きもち　−１３−

　その巨大な部屋は、複数の照明が存在するにも関わらず、見上げるほど高
い天井の四つほどの蛍光灯しか点いていない。その巨大な部屋は、中央に塊
まって置かれている五つのカプセルが占有していた。カプセルの中身は不透
明ガラスが隠している。
　そのカプセルを見上げる、少年。カプセルの下にある機械のキーボード
に、少年はコードを打ち込む。
　ちょうど視野に入るふたつのカプセルが、透明度を増していく。少年の瞳
は、その中で眠るふたりの姿を見て、輝きを増していった。
　左のカプセルには、女性の姿が。右のカプセルには、男性の姿が。
　その寝顔は、安らぎに満ちていて、それを見るのが日課の少年は、この日
も笑顔を見せるが、その表情に喜んでくれないことを改めて思い、少し、悲
しくもなった。
　リシュネが来たことに気づいて、少年はカプセルをまた外から見えないよ
うにした。そして、リシュネが来たときにはいつもの表情を作る。
　それは、リシュネの過去を知るからであり、それが、マナーだった。
「どうしたの？　少し時間が掛かったみたいだけど」
「コントロールがまだ不完全みたい。あとから内出血して……」
　ボディスーツに開いた部分から見えるリシュネの白い肌は、所々蒼くなっ
ていた。
「自分の体すらコントロールできない――ＡＰ、なのに」
「セカンドバージョン以前はそうなっているんだ。コントロールが完璧にで
きないのは、一種のプロテクトだから」
　少年は手袋を取り、手の甲をリシュネへと向けた。眉間にしわが寄ると、
手の甲に傷口が生まれ、血が噴き出した。リシュネは呆気にとられて見てい
た。
「僕以降のバージョンには、そういうプロテクトが掛かっていない。望め
ば、心臓を止めて死に至ることさえできる、本来ＡＰとはそういうものなん
だ」
　その傷は、自然に消えた。
「それは本当に、「革新」なのかな……」
「でも僕達は、この「進歩」した体を持っているからこそ、こうして今も生
き続けている」
「そうね……」
　リシュネはふたつのカプセルを見上げた。少年は、うれしくも悲しくも
なった。
「私達は生きている。この体が、私達を救ってくれた」
「そう……でも、僕達は、生かされてもいる」
「不満？」
「自由がないのはね」
　少年とリシュネは歩き出し、中身は見えるが中身の入っていないカプセル
の前へと来る。
「僕達はこのベッドがなければ生きていけない。それさえ我慢すれば、無敵
の体を維持することができる。それを不満と言ったら、わがまま以外の何者
でもないね」
「でも、不満そう。……洋一？」
　少年は、黙ったままだった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『今回で１５０号ってことは』
「次回は３周年です」
『ホームページの方が更新しない分、うちががんばったって感じ？』
「 Java メルマガもあんまり人気なかったしね……」
『タダが一番よ、タダが。で、３周年を迎えてなんかあるの？』
「何もないんだよね」
『何もないの……ぷらとわをホームページにって話は？』
「ホームページ容量をホットハーブに回すから無理みたい」
『ホームページはどんどんプログラミングから離れてくね……』
「ま、その分僕らががんばればいいよ」
『いつまで？』
「……あと何年かかるかなぁ。３年で終わればいいけど」
『げ！　そんなに！？』
「まだまだ教えることいっぱいあるからねー」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 8.08
ダイアログプロシージャ

「まずは前回のおさらいから」

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

// リソースをインクルードします。
#include "resource.h"

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    return FALSE;
}

// WinMain() 。
int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    int iRet
        = DialogBox
            ( p_hInstance
            , MAKEINTRESOURCE( IDD_MAIN )
            , NULL
            , DialogProc
            );

    return 0;
}

『ダイアログをこれで作っちゃうんだよね』
「 DialogBox() でね。で、まず確認して欲しいんだけど、 WinMain() の
return 0; にブレークポイントを置いて」
『ほい。んで実行』
「ブレークポイントには止まってないよね」
『あ、ホントだ。ってことは DialogBox() から帰ってきてないんだね』
「そう、ダイアログが閉じるまで DialogBox() は返ってこないんです」
『ってゆーか、まずはダイアログを閉じられるようにならないとね』
「そうだね。で、ここで出てくるのは【メッセージ】ってもの」
『ん？　どっかで聞いたような』
「 Version 5.28 ( No.093 ) と Version 5.29 ( No.094 ) を読み返してみ
るといいかも」
『そうそう！　Spy++ でメッセージって見てみたんだよねー』
「このメッセージを直接受け取るのが、ウィンドウプロシージャなんです」
『ってことは、あのときの WM_MOUSEMOVE とかが送られてくる？』
「そう。実際に受け取ってみましょう。ダイアログプロシージャをこう書き
換えて」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_MOUSEMOVE )
    {
        // マウスの位置を取り出します。
        char pchPosition[1024];
        sprintf
            ( pchPosition
            , "%d, %d\n"
            , LOWORD( p_lParam )
            , HIWORD( p_lParam )
            );
        OutputDebugString( pchPosition );
        return TRUE;
    }

    return FALSE;
}

『 if ひとつって感じ。実行、お、ダイアログの上でマウス動かすとちゃん
と位置が出る！』
「今回の例は DialogProc() で全部やってるけど、これを外に関数を作って
呼び出すようにすれば」
『 OnMouseMove() と同じになる！』
「そゆこと。とりあえずひとつずつ見ていこうか。まず引数」
『第１引数はウィンドウハンドルだね』
「これはそのまんま、ダイアログのウィンドウハンドル」
『まんまね』
「ただ……たとえばフォルダのウィンドウとかっていっぱい作れるよね」
『うん』
「このプログラムでそういうふうにいっぱいダイアログを作るとしても、そ
の数の分だけダイアログプロシージャを作れるわけじゃないよね」
『そりゃそーよ、いくつ作るか分かんないのに、関数をその数作るなんてで
きるわけ……げ！　ってことはいろんなダイアログで使い回すの！？』
「そう、同じダイアログプロシージャを使っていっぱいダイアログを表示し
たら、それぞれのダイアログのイベントで呼ばれて」
『ってことはウィンドウハンドルもそのダイアログの数だけ……あう〜』
「 MFC の場合はその辺を管理をちゃんとしてくれるから、たとえば 
CTestDlg の変数を３つ作ってダイアログを３つ作ったら」
『それぞれ別のが呼ばれる？』
「そのへんは MFC の便利なとこかな」
『ってゆーかかなり便利かも……』
「ま、当分はいっぱいウィンドウを作らないってことになるかな」
『そうなりそうね……次は第２引数、これがメッセージ？』
「そう、メッセージは符号なしの整数値で、これを調べれば大丈夫」
『残りの WPARAM と LPARAM もそうだけど、さっきの２回のとこでやってる
ね』
「あのときは送る側で、今回は受け取る側、でもどっちも同じってこと」
『ってことは、このダイアログプロシージャで、自分のダイアログに 
SendMessage() したりってできるの？』
「できるよ。今度やってみようか」
『へー、なんか不思議……』
「今はまず WM_MOUSEMOVE 」
『そうそう。 WPARAM はほっといて、 LPARAM に LOWORD ってのと HIWORD 
ってのやってるね』
「 WM_MOUSEMOVE のリファレンス見れば分かるけど、 WPARAM はどのキーを
押しているかっていうのが入ってます」
『コントロールキーとかわかるのねー』
「で、 LPARAM の方に、マウスの位置が入ってます。んーと、ちょっとこう
書き換えてみて」

        sprintf
            ( pchPosition
            , "%X, %X\n"
            , LOWORD( 0x12345678 )
            , HIWORD( 0x12345678 )
            );

『ほい実行。お』

5678, 1234

『って出た』
「これで見ると分かるとおり、 LOWORD は３２ビット整数値の下位２バイト
だけ抜き取るマクロ」
『 HIWORD は上位２バイトだけ抜き取るマクロってわけね。ってことは』
「そう、マウスの X 方向の位置は LPARAM の下位２バイトに、 Y 方向の位
置は上位２バイトに入ってるんです」
『せっこーい！　ひとつの変数にふたつも入れてるなんて！』
「この辺はしょうがないところもあるかな。ウィンドウプロシージャで渡せ
るパラメーターは WPARAM と LPARAM だけだから」
『なんとかその中でやりとりしなきゃいけないってわけね……』
「こういうプログラムはあまり勧められないけど、ウィンドウプロシージャ
を直接扱う上では必要なことなんだよね」
『勧められないって？』
「場合場合で WPARAM の中にどういうデータが入ってるかって知ってないと
いけないからね。そういうのは勘違いひとつで」
『バグ作っちゃうわけねー』
「この辺も MFC のメリットかな。と、話を戻してと」
『 OutputDebugString() は Version 6.18 ( No.118 ) でやったね。 
TRACE と同じの』
「そうそう。 Version 8 になってから TRACE 使ってないの気付いた？」
『あ、そういえば』
「 TRACE は MFC のだから」
『げ、使えないんだ。だから sprintf() 使ってたのね……』
「でも sprintf() と OutputDebugString() があれば同じことができるから
大丈夫」
『それをしてるってわけね』
「で、最後に return TRUE; 」
『ん？　重要なの？』
「重要と言えば重要。メッセージをダイアログプロシージャで処理した場合
には TRUE を、処理しなかった場合には FALSE を返す決まりになってます」
『 DialogProc() の戻り値ってことだよね』
「そうそう。処理しなかったってことで FALSE を返すと、ウィンドウズが
諸々の処理を代わりにしてくれます」
『へー、便利』
「実際に……」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    return TRUE;
}

『げ！　ダイアログがちゃんと表示されない！』
「これは TRUE を返しちゃってるから、ウィンドウズが〈じゃあ表示も代わ
りにしなくていいんだ〉って判断しちゃってるから」
『たったこれだけでこんな違うのねー』
「一応 DialogProc() のリファレンスってあるんだけど、この辺までは細か
く書いてないかな。こういうのでずーっと迷ったりすると面倒だから、この
辺は憶えておいた方がいいかも」
『ずーっと迷ったりしたことあるの？』
「何度かね……」

/*
    Preview Next Story!
*/
『この辺って、知ってないとできないことって多いよね』
「自動でって少ないからね。ダイアログ閉じるのもそうだし」
『そうよそうよ、閉じるのひとつ手動だなんて！』
「でも手動で閉じられると便利なこともあるんだよね」
『便利なこと？』
「というわけで次回」
＜ Version 8.09 ダイアログを閉じてみる ＞
『につづく！』
「自動が必ずしも便利じゃない！」
『……水希ちゃんが自動で書いてくれれば……』
「それを火美ちゃんに期待してるんだけど……」
『げ！　差別よ差別！』


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

・４月表紙壁紙登場！
　毎月恒例、新しい表紙壁紙です。たぶんお花見な感じになるかなー？

・KAB-studio.h ３周年！
　KAB-studio.h が３周年を迎えます！　だからといって特に何かあるわけ
じゃないんだけどね（汗）。


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

