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

    KAB-studio.h


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

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

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

・更新なし。
　セキュアド試験勉強のため、今週はお休みします……。


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

2002/10/13 (Sun)
　眠い。ほとはー描きました。アニメばっか。「ＧＯＦ」と「 GoF 」。

2002/10/14 (Mon)
　麻婆豆腐。劇場版ナデシコは良かったです〜。「ナデシコ」。プレステ２
版 AIR をやっとクリア。今日はこれがほとんど。やってないのが貯まって
く……。

2002/10/15 (Tue)
　いきなり電車止まる。いきなり電話が来る。お仕事が忙しく。最近こみパ
づいてる。「アンソロ」。ＷＰＣに行きたいけど……。

2002/10/16 (Wed)
　かなり眠い。仕事はテスト仕様書のレビュー。久々、今日の一枚。

2002/10/17 (Thu)
　お仕事は前プロジェクトのとかテスト仕様書とか機能追加とか。こみパ購
入。家のネットワーク。クロスケーブル少ない。「シスプリ」。

2002/10/18 (Fri)
　テスト仕様書書き。ＫＳＫの方とお話。頼られるとあかん。「ＫＳＫ」。
床屋で切られすぎる。逮捕がなんか……。８０万のために勉強がんばりま
す。

2002/10/19 (Sat)
　ずっとセキュアドの試験。勉強自体が楽しい？　「セキュアド」。現場で
使えるレベルとは……。 Shade のレンダリングを色々。ラジオシティ要ら
ない？　テレビは若王子様〜。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.01
１からウィンドウを作る！

「というわけで、今回から第１１章です」
『なんか唐突よね』
「そうでもないと思うよ。これまでのメッセージ関係のまとめの章だから」
『その辺の話が出てくるってわけね』
「で。まずは今回のテスト用にプロジェクトを作ります。今回は MFC を使
わずにウィンドウを作ってみるっていうもの」
『前にやったね、それ』
「そうその Version 8.01 ( No.143 ) と同じようにまずはプロジェクトを
作ります」
『ってことは、まず【ファイル】−【新規作成】で【Win32 Application】
を選んで、プロジェクト名は？』
「 SimpleWindow で」
『前が SimpleDialog だったんだもんね』
「あとは【空のプロジェクト】を選んで」
『そしたらファイルの新規作成？』
「これもあの時と同じ。ファイル名は Main.cpp にして、とりあえず」

#include <Windows.h>

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    MessageBox( NULL, "テスト", "WinMain()", MB_OK );
    return 0;
}

『ビルドして実行！　うん、ダイアログ出た』
「ここまででまずは第１段階。では次に、これを次のように修正して」

int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    // ウィンドウを作ります。
    HWND hWnd = CreateWindow
        ( "#32770"
        , "テスト"
        , WS_OVERLAPPEDWINDOW
        , CW_USEDEFAULT
        , 0
        , CW_USEDEFAULT
        , 0
        , NULL
        , NULL
        , p_hInstance
        , NULL 
        );

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

『長い……ってほどじゃないか』
「実はこれに似たのを前にやってます。 Version 5.25 ( No.090 ) を見
て」
『あ、ホントだ。この時はボタンを作ってるんだね』
「あの時はボタンのウィンドウを作りました」
『そうそう、コントロールもウィンドウって話で』
「ここでは同じように、普通のウィンドウを作ってみます。……普通とは違
うか」
『違うの？　CreateWindow() ってウィンドウ作る API だよね』
「そうだけど、引数が違うからね」
『引数……第１引数はウィンドウクラス名だったよね。 #32770 ってな
に？』
「これはダイアログのウィンドウクラスなんです」
『あ、そういえば Version 5.24 ( No.089 ) でしたね』
「これを渡してるから、ダイアログが作られる……はずだけど」
『だけど？　あ、ビルドして実行。あ、一瞬出てすぐ消えちゃった』
「これは当然で、 Version 8.07 ( No.149 ) で説明したダイアログプロ
シージャがないから」
『あ、そういえば。……でもさ、あのときは DialogBox() に渡したで
しょ、ダイアログプロシージャ。今回は渡しようがないんじゃない？』
「その辺がこれからの課題だね。その話は次回に持ち越しってことで。残り
の２行も見ておくね」

    ShowWindow( hWnd, p_iCmdShow );

「この行はウィンドウを表示状態を変える関数」
『これもさっきのボタン作った回で見たね』
「それと、 p_iCmdShow を使ってるでしょ」
『これは WinMain() の引数だね。あ、 Version 8.05 ( No.147 ) の、
ショートカットから渡された表示状態なんだね』
「これを渡して表示状態を変えてるから、ショートカットの表示状態がちゃ
んと反映されるんです」
『……ちょっとまった！　じゃあ、これをしなかったら、ショートカットの
って無視されちゃうってこと？？　自動じゃないの？？』
「そういうこと。実は今回の章はそういうのがすごく多いから」
『つまり、今まで自動だと思ってたことが……』
「本当はプログラムでちゃんと書かなきゃいけない、っていうこと。大半は 
MFC が肩代わりしてくれてたからね」
『 MFC なしって結構きついのかも……』
「結構、じゃないから」
『げ』
「で、最後の１行」

    UpdateWindow( hWnd );

「これは表示状態を更新する関数」
『 ShowWindow() だけじゃ表示されないの？』
「そう、 ShowWindow() は表示状態を変えるだけで、実際の表示内容を変え
るわけじゃないから」
『そういうのって分かりにくいよねー』
「そうだね、この辺も今回のキーかも。この関数とこの関数はペアで使う、
とかの仕組みを憶えていかないと」
『複雑ねー』
「さて、今回はここまで。ここからは、次回のための準備です」
『次回って何するの？』
「次回は、ウィンドウクラスを登録します」
『え！？　ウィンドウクラスって自分で登録できるの！？』
「そうしないとアプリごとのウィンドウが作れないからね。で、そのウィン
ドウクラスを登録するための関数を用意します」

#include <Windows.h>

// ウィンドウクラスを登録します。
bool RegistWndClass
    ( const char *const p_pchWndClassName
    , HINSTANCE p_hInstance
    )
{
    // 後で中身を追加します。
    return true;    
} 

// ウィンドウを作ります。
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
        , NULL
        , p_hInstance
        , NULL 
        );

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

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

// 最初に呼ばれる関数です。
int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    const char pchWndClassName[] = "SimpleWindowClass";
    
    bool bRes
        = RegistWndClass( pchWndClassName, p_hInstance );
    if( bRes == false )
    {
        return -1;
    }
    
    bRes
        = CreateAndShowWnd
            ( pchWndClassName 
            , p_hInstance
            , p_iCmdShow
            );
    if( bRes == false )
    {
        return -1;
    }
    
    return 0;
}

『な、長い……』
「けど、ほとんどさっきと同じ。まずウィンドウを作ってた部分は 
CreateAndShowWnd() の方にまとめました」
『他の関数に追い出しちゃったわけね』
「で、新しく RegistWndClass() を追加しました。この中身については次回
に続く！」

/*
    Preview Next Story!
*/
『なんか、嫌な予感がする』
「な、なに？」
『今回の第１０章はかなり大変と見た！』
「確かに今回は簡単楽々とはいかないからね」
『 MFC がないだけで大変なのねー』
「確かに、 MFC があればウィンドウクラスとか気にしなくていいし」
『ウィンドウクラス？』
「というわけで次回」
＜ Version 10.02 ウィンドウクラスを登録する ＞
『につづく！』
「ま、気にならないうちが花って気もするけど」
『？』


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

