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

    KAB-studio.h


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

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

/*　　　　　　　　　　　次回はお休みします。　　　　　　　　　　　*/

　年末年始ということで、 KAB-studio.h は１２月３０日には配信しませ
ん。次回配信は１月６日になります。御了承ください。

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

・ほとはー追加なし……。
　もうしわけないです、三人合体ホットハーブを追加できませんでした……
３章完結は来年に持ち越しです。ごめんなさい。


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

2002/12/15 (Sun)
　久々休出。 JavaScript ってあいまい。こみパサントラやコミケカタログ
を購入。今度のコミケには行きます。サブＰＣをＣＤサーバー代わりに。
バッチファイルは「ボックス選択」で。そしてクリスマスと社内 TOEIC 。
かわいいと好きは違うよね。そして表紙の光源ってどこ？　どこかな。

2002/12/16 (Mon)
　お仕事は文字コードが複雑で困る。ＡｉｒＨ”不調はプロバイダのせい？
今年を振り返る・１月２月。おねてぃスタート。お仕事が忙しかった時期で
す。

2002/12/17 (Tue)
　「Ever17」ドラマＣＤ。本編では不遇な彼のお話。個人的にはいい感じで
す。お仕事はなかなかはかどらない……。灰羽連盟が佳境でいい感じ。

2002/12/18 (Wed)
　ServletRequest#getParameter() で &#nnnnn; ってコードが返ってくるの
はなぜー？　テレビは ROBIN がいい感じ。今年を振り返る・３月４月。
おねてぃ最終回に初仕事のサービスイン、そして暇。

2002/12/19 (Thu)
　文字コード問題解決せず。夜は派遣先の忘年会。熱燗一本で一杯一杯。弱
くなってる？　ＫＳＫの人ともお話。そして VS.NET academic 版 MSDN 。
プロフェッショナル版はちゃんといっぱいＣＤ−ＲＯＭ送られてきます。
そして .Net サーバーは買い？

2002/12/20 (Fri)
　昨日から寝てない。お仕事は文字コードの問題が解決。奇跡が起きた。早
く上がっていつもの面々と忘年会。みんな変（爆）。そのままずっと起きて
て次の日の午後１時まで……。げんしけんが面白い。そしてどの辺が似て
る？

2002/12/21 (Sat)
　１．５時間ずつ仮眠。なんとかかぶヘッダーだけ書く。今年を振り返る・
５月６月。 Kanon 初プレイにオーストラリア旅行と波瀾万丈の２ヶ月。で
もそれはまだ序章？


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.09
メニューふたたび

「今回は Version 9.06 ( No.167 ) で紹介したメニューの処理をしてみま
す」
『よーするに MFC でできたことをってことだよね』
「そうそう、いつものパターンだけど」
『 MFC と SDK でってことね。で……今はメニューないから、まずメニュー
を作らなきゃいけないんだよね』
「というわけで Version 8.06 ( No.148 ) を見ながら、まずはリソースを
作ります」
『えーっと、まず【リソーススクリプト】を作ってと。ファイル名は 
SimpleWindow.rc っと』
「で、右クリックで【挿入】を選んで Menu を新規作成」
『ほいほい。お、何もないメニューが出て来た』
「まずそのメニューの ID だけど」
『 MFC の時は IDR_MAINFRAME じゃなきゃいけなかったんだよね』
「でも SDK の時はそういうの関係ないから、 IDM_MAIN でいいかな」
『それってどうやって変えるの？』
「メニューバーの上で右クリック」
『あ、これでプロパティ出せばいいんだね。うん、変えたよ』
「次はテスト用のメニューを用意します。メニューそのものについては 
Version 9.02 ( No.163 ) を参照してもらうとして。まずメニューバーの最
初のをサブメニューにしてもらってその下の最初のアイテムを」
『あの時と同じにしよっと。 ID は ID_MENU_TEST 、キャプションは
【テスト(&T)】、プロンプトは〈テストだよ〉っと』
「とりあえずそれでビルドして実行してみて」
『ほい。……メニュー出ないんですけど〜』
「そう、メニューは自動では出ないんです。プログラムの方も少し修正しな
いと表示されないから。まず、 SimpleDialog の時と同じように」

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

// 下のを追加。
#include "resource.h"

「って感じに resource.h をインクルードしてもらいます」
『ところで resource.h ってなんてファイルなの？』
「まだ調査中。次に、ウィンドウを作るときに表示するメニューを指定しま
す」

// ウィンドウを作ります。
bool CreateAndShowWnd
    ( const char *const p_pchWndClassName
    , HINSTANCE p_hInstance
    , int p_iCmdShow
    )
{
    // ウィンドウを作ります。
    HWND hWnd = CreateWindow
        ( p_pchWndClassName
        , "テスト"
        , WS_OVERLAPPEDWINDOW
        , CW_USEDEFAULT
        , 0
        , CW_USEDEFAULT
        , 0
        , NULL
        , LoadMenu( p_hInstance, MAKEINTRESOURCE( IDM_MAIN ) )
        , p_hInstance
        , NULL 
        );

    if( hWnd == NULL )
    {
        // ウィンドウの作成に失敗しました。
        return false;
    }

    // ウィンドウを表示します。
    ShowWindow( hWnd, p_iCmdShow );
    UpdateWindow( hWnd );
    return true;
}

「メニューは CreateWindow() の最後から３番目の引数で指定します」
『 LoadMenu() って LoadIcon() とか LoadString() なんかと同じの？』
「そう、リソースからメニューを取ってきてメニューのハンドル、つまり 
HMENU として返してきます」
『 MAKEINTRESOURCE() は、初めてじゃないよね』
「 Version 8.07 ( No.149 ) とかで出てきてるね。 API の LoadMenu() は
昔の関数だからそのままリソース ID を渡せなくて、 MAKEINTRESOURCE に
一度渡してその戻り値を使わなきゃいけないんです」
『結局、何してるの？　これ』
「これはマクロ。 WinUser.h に MAKEINTRESOURCE 、実際には 
MAKEINTRESOURCEA があるから見てみて」
『……？　なんかカッコと LPSTR とかとが色々……』
「ま、ようするにキャストしてるだけ」
『あ、それだけなんだ』
「 LoadMenu() の機能自体は普通にリソース ID を受け取れるようになって
るんだけど、昔のだから方が LPSTR なんだよね」
『だからキャストして……ごまかしてるってこと？』
「ま、そういうこと。じゃあ」
『あ、試してなかったね。ビルドして実行！　おー、ちゃんとメニューが表
示された！』
「とうわけで、メニューの表示はここまで。次は、メニューを選択した時に
そのメッセージを受け取れるようにします」
『ってゆーかそっちが今回の本命なんだよね』
「なんだけど……実はすごく簡単。ウィンドウプロシージャを次のように修
正して」

// ウィンドウプロシージャ。
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 メニュー。
            PostQuitMessage( 0 );
            return 0;
        }
    }

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

『 WM_DESTROY は前もあったのだよね。次の WM_COMMAND のが……あれ？』
「見覚えあるでしょ。 Version 8.09 ( No.151 ) で、ダイアログのボタン
が押されたときの処理をしたでしょ、その時のダイアログプロシージャは」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == IDOK )
        {
            // OK ボタンが押されました。
            EndDialog( p_hDlgWnd, IDOK );
            return TRUE;
        }
    }

    return FALSE;
}

『うわ、ほとんど同じ！』
「つまり、メニューもボタンも、同じコマンド ID 系の処理ってこと」
『どっちも、押されたら WM_COMMAND が送られてきて、 WPARAM の中に押さ
れたのの ID が入ってる……ホントに簡単ねー』
「呼ばれた時の処理は WM_DESTROY のと同じだから大丈夫だよね」
『あ、ビルドして実行！　ホントだ、メニュー選ぶとちゃんと終了する』
「この辺の仕組みは共通だから」
『共通！』
「え！？　な、なに？」
『 Version 9.11 ( No.172 ) で言ったけど、メニューもアクセラレーター
もツールバーも同じ仕組み、ってことはボタンも同じ！！』
「そういうこと、この辺は全部同じ WM_COMMAND 系の処理でできるわけで
す。たとえば、ダイアログにもメニューって付けることできるから」
『メニューとボタンを同じ ID にすれば、どっちも処理できる！』
「そういうこと。こういう仕組みってやっぱり MFC だけじゃ分からないか
らね」
『確かに、こういうふうに WM_COMMAND を拾ってみないとわかんなかったか
も』
「もうひとつ付け加えると…… Version 9.06 ( No.167 ) で」
『あ！　あのとき、メニューも WM_COMMAND だって言ってた！』
「これは、逆の事が言えるわけ」
『逆？』
「だってあのとき、押したときのイベントハンドラを作るには COMMAND を
選ばなきゃいけないって、教えなきゃ分からなかったでしょ」
『うん、そうだけど』
「でも、もし SDK でプログラムを組んだことがあったら、メニューも 
WM_COMMAND が送られてくるって知ってるから」
『そっか、それなら COMMAND だって分かる……あ！　ってことはあれっ
て、 SDK で作った人向けってこと！？』
「そういうこと。 SDK で作ったことのある人、メッセージについてちゃん
と知ってる人向けってことだね」
『イベントハンドラもメッセージ名で選んでたもんねぇ。 ClassWizard 
使ってるって言っても、完全な初心者向けってわけじゃないんだ』
「最初に出た VC1.0 とかはそういうユーザーは想定してなかっただろうか
らね」
『どゆこと？』
「それまでは SDK だけで作るのが普通だったから」
『むしろメッセージ関係を知らない人が VC を使うなんてなかったんだ』
「 VC1.0 とかは SDK だけで作るのが大変だってことでこういう Wizard や 
MFC を提供したって面があるからね」
『……あたしはそーゆー歴史的事情も知ってなきゃいけないの？』
「……実際、この業界の歴史って知ってないと困るかも……」

/*
    Preview Next Story!
*/
『プログラミングに歴史の勉強が必要なんて〜』
「問題は勉強が必要なことじゃなくて、情報が少ないことかも」
『え？　今なんていくらでも情報なんて転がってそうだけど』
「転がってても見つからなきゃしょうがないでしょ」
『そりゃそうだけど』
「プログラミングの情報はノウハウ化して文章化されないものも多いから」
『そういうのは探しても見つからないわけね』
「というわけで次回」
＜ Version 10.10 アクセラレーターふたたび ＞
『につづく！』
「だから、こういうマイナーな情報も」
『こういうふうにちゃんと教えてくれてるわけねー』


////////////////////////////////////////////////////////////////////
/*     ２００２年１２月３０日（月）〜２００３年１月３日（金）     */
http://www.kab-studio.com/

　KAB-studio の年末年始の予定についてお知らせします。
・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
*/
////////////////////////////////////////////////////////////////////

