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

    KAB-studio.h


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

    送信日： 2003/01/27(Mon) No.191
    配信数： 3380 ( 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


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

2003/01/19 (Sun)
　思考フェーズと行動フェーズ。そして考えなしで深夜に片付け開始。途中
で寝られない。でも部屋は広くなった。疲れたけど。ほとはーってやっぱり
描くの大変。 ANUBIS 体験版ゲット。どれみとＧＡがいい感じ。 Kanon も
いいよねー。

2003/01/20 (Mon)
　会社でうとうと。お昼にケーブルとか買いに横浜へ。月と海の子守唄。
帰ってからはほとはー新キャラのラフとか。ディスプレイの位置が悪いから
変えたい。マルチディスプレイは Win2K を入れてから。

2003/01/21 (Tue)
　ペースを落として。お昼にサイバーフォーミュラＤＶＤ購入。最後の２回
はやっぱり熱い。 Ever17 のＣＤがない。貴乃花には全盛時にヒクソンと
やって欲しかった（爆）。エクスツールスが……。

2003/01/22 (Wed)
　仕事はかなりやっかいなことが。頭がこんがらがる……。 Ever17 のＣＤ
もないしー。「○○翡翠」より琥珀さん？　 Ever17 のＣＤは発売延期に
なったらしい。コミケで買えるものってたいがい委託もされるから、コミ
ケってあまり行く必要ない……？

2003/01/23 (Thu)
　仕事ははかどらず。夜に派遣先の飲み会。中国の人に中国拳法のこととか
訊いたり。松屋の謎のタブレットＰＣ。そしてプレゼントかザウルスとか。
IT なんて役に立たないねー。

2003/01/24 (Fri)
　仕事が少しはかどった。 ant 使って自動コンパイル。コミケサークル申
込書類。 Ever17 と ANUBIS を勧める。月姫にもはまらせたい。徹夜はせず
にのんびり。これから Win2K インストール。

2003/01/25 (Sat)
　昨日の夜は旧ＰＣに Win2K Server インストール。なぜかドライブが逆順
に。でも入れたおかげでかなり速く。ターミナルクライアントで別ＰＣから
操作できるように。それから休出。そのあと秋葉原へ。 ATI RADEON 9000 
他購入。大王は毎月買うべきか？　帰ってからセットアップ。マルチディス
プレイって微妙だ。テレビで見られない……。それ以外はいいんだけど。
ドリキャス１８禁版としてこみパ＆いないこを出して欲しい……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.13
ポップアップメニューふたたび

「前回は」
『手抜きでした』
「……否定はしません。えーっと、前回の最後で触れたように、これから手
を加えるのはウィンドウプロシージャの関係だけ。他はほぼ固定かな」
『これだけの機能があればなんとかなるってことね』
「そういうこと。まぁうまくいかない部分があったら微調整は必要だけど、
でもそのくらいだから。で、今回はそのウィンドウプロシージャについて」

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_DESTROY )
    {
        // ×ボタンが押されました。
        PostQuitMessage( 0 );
        return 0;
    }
    else if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == ID_MENU_TEST )
        {
            // ID_MENU_TEST メニュー。
            OutputDebugString( "ID_MENU_TEST : 終了します。\n" );
            PostQuitMessage( 0 );
            return 0;
        }
    }

    // 標準的な処理をします。
    return DefWindowProc( p_hWnd, p_uiMessage, p_wParam, p_lParam );
}

「今はこんな感じだけど、ホントは良くない例です」
『良くないの？』
「 MFC みたいに、それぞれのメッセージ毎に別の関数にするのが理想。た
とえばこういうふうに」

// ウィンドウが閉じます。
LRESULT OnDestroy()
{
    PostQuitMessage( 0 );
    return 0;
}


// ID_MENU_TEST が選択されました。
LRESULT OnMenuTest
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    OutputDebugString( "ID_MENU_TEST : 終了します。\n" );
    PostQuitMessage( 0 );
    return 0;
}

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_DESTROY )
    {
        return OnDestroy();
    }
    else if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == ID_MENU_TEST )
        {
            return OnMenuTest( p_hWnd, p_wParam, p_lParam );
        }
    }

    // 標準的な処理をします。
    return DefWindowProc( p_hWnd, p_uiMessage, p_wParam, p_lParam );
}

『つまりメッセージとか ID とかごとに別の関数呼ぶんだ』
「そのままウィンドウプロシージャに書いちゃうと、ウィンドウプロシー
ジャがどんどん長くなっちゃうからね」
『質問！』
「はい火美ちゃん」
『 MSDN 見てるとそういうながーいウィンドウプロシージャがいっぱいある
んですけど』
「全部悪い例です」
『……ホントに悪いの？』
「断言はできないけど、でも悪いと思うよ。ひとつの関数が大きくなるとプ
ログラムが見にくくなるから。特にネストが深くなって右へ右へとずれてい
くと……」
『あー、それはちょっとヤダ』
「まぁ、普通の関数と違うから微妙な部分もあるんだけど、でもやっぱりし
ない方がいいと思うよ」
『もひとつ質問！』
「はい火美ちゃん」
『 OnMenuTest() の引数がいっぱいあるのはなんで？　使ってないのに』
「これは微妙かな。あとで ID_MENU_TEST の処理で LPARAM とかが必要にな
る可能性があるかもしれないから、とか」
『つまりあとの拡張性のため？』
「ひとつはね。あと、こういうふうに引数付きのを用意しておいて、同じ 
WM_COMMAND 用関数が必要になったらコピペするとか」
『使い回し用かー、確かにメニューが増えたらこの関数もいっぱい作る、な
ら引数付きのを用意しておいてコピペしまくり、の方が楽ね』
「でも必要ない引数を渡すっていうのも良くない気もするし、微妙かもね。
さて、今回は Version 9.05 ( No.166 ) で使ったポップアップメニューと
同じものを作ってみます」
『右クリックメニューでってゆーのね』
「さて問題。右クリックしたときに送られてくるメッセージは？」
『 WM_RBUTTONUP ！』
「……さらっと出てきたね」
『だってその号に書いてあるもん』
「あ、ホントだ。というわけで、このメッセージが送られてきた時の関数を
まず追加します」

// 右クリックされました。
LRESULT OnRButtonUp
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    OutputDebugString( "右クリックされました。\n" );
    return 0;
}

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_DESTROY )
    {
        return OnDestroy();
    }
    if( p_uiMessage == WM_RBUTTONUP )
    {
        return OnRButtonUp( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == ID_MENU_TEST )
        {
            return OnMenuTest( p_hWnd, p_wParam, p_lParam );
        }
    }

    // 標準的な処理をします。
    return DefWindowProc( p_hWnd, p_uiMessage, p_wParam, p_lParam );
}

『ビルドして実行、右クリックっと。うん、〈右クリックされました。〉っ
て出た』
「では次に、この関数の中にポップアップメニューを表示する機能を追加し
ます」

// 右クリックされました。
LRESULT OnRButtonUp
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    // 画面上のマウスカーソルの位置を取得します。
    POINT stPoint;
    GetCursorPos( &stPoint );
    // メニューバーを読み込みます。
    HMENU hMenuBar
         = LoadMenu
            ( GetModuleHandle( NULL )
            , MAKEINTRESOURCE( IDM_MAIN )
            );
    // サブメニューを取得します。
    HMENU hSubMenu
        = GetSubMenu( hMenuBar, 0 );
    // ポップアップメニューを表示します。
    TrackPopupMenu
        ( hSubMenu
        , TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON
        , stPoint.x
        , stPoint.y
        , 0
        , p_hWnd
        , NULL
        );

    return 0;
}

『結構長い……』
「では次回に続きます」
『え”』

/*
    Preview Next Story!
*/
『さくっと続くね』
「ホントは１回でまとめたいんだけどね」
『そういえば、毎週違う話って感じだよね』
「ひとつのことをずーっとやっても仕方ないし」
『そーゆーもん？』
「その方が詰まらないし」
『そんなんでいいのかな……』
「というわけで次回」
＜ Version 10.14 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 - 2003 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

