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

    KAB-studio.h


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

    送信日： 2003/03/24(Mon) No.199
    配信数： 3230 ( 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/Comic/HotHerb/


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

2003/03/16 (Sun)
　午前中はのんびりして終わり。午後はほとはー。やっぱり前より時間掛
かってる？　映画「 CUBE 」見る。面白いけど…… Ever17 の方がいい。爆
笑オンエアバトル、前と顔ぶれがかなり違う。こみパコンプまでの道のり。

2003/03/17 (Mon)
　お仕事はデバッグ中心。まったりモード。来年度もここ。ソルパック月例
会議。ほとはー同人誌、フルカラーだとかなり高くなっちゃう……。

2003/03/18 (Tue)
　謎なバグとか。フレッツＡＤＳＬ開通目前。プロバイダ選びに難航。横浜
でハンターｘハンターＤＶＤとか購入。とりえあずプロバイダは So-net で
行こう。

2003/03/19 (Wed)
　最終リリース前で最終テストでバグが（泣）。神速で修正。ヒートガイ
ジェイが入ってない……。

2003/03/20 (Thu)
　リリース日で留守番、そしてまったり。 Struts って複雑。仕組みが解れ
ば楽だけど。３連休。横浜でアンソロとか。うたわれるもの、したいなぁ。
ほとはーを売れるかも？

2003/03/21 (Fri)
　３連休１日目。 ADSL ルータ来る。ナンカツサンド。おっきな本棚購入。
その他部屋の整理も。「シャンゼリオン」の DVD-BOX が出る！　これは絶
対買わねば……。

2003/03/22 (Sat)
　今日はぐたーっと。でもぷらとわとほとはー完成。明日はのんびりする予
定。中国語辞典と Windows ネットワークの本購入。たいじーくぁん。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.21
ツールバーとクライアントエリア

「前回はウィンドウに文字列を表示してみました」
『前にやったのの SDK 版ってことだったんだよね。でも』

    TextOut
        ( hDC
        , 0
        , 28
        , pchText
        , strlen( pchText ) 
        );

『の 28 ってのが謎なのよねー』
「試しに 0 にしてみると？」
『ビルドして実行。あ”、なんも表示されなくなっちゃった……』
「実はこの時、文字列はツールバーの裏に表示されてるんです」
『えっ？　あっ、ってことは 28 ってツールバーの高さ！？』
「そう。【クライアントエリア】って憶えてる？」
『うん、 Version 7.02 ( No.122 ) でやったね。タイトルバーやメニュー
じゃない、こっちが描画していい部分のことだよね』
「そのクライアントエリアはメニューの中、つまり、ツールバーはそのクラ
イアントの中に置いてあるんです」
『げ！　ツールバー置いたらその分クライアントエリアが狭くなるわけじゃ
ないの？？？』
「そうじゃないんです。だから、その分ずらして描画する必要があるわけ」
『うー』
「ちなみに、この 28 って数字はツールバーの状態で変わるから、実際には
実行時に取得した値を使った方がいいかな」
『どゆこと？』
「えっとね……ツールバーって OnCreate() で作ってるよね」
『うん』
「その上にこの変数を置いて」

int g_iToolBarHeight;    // ツールバーの高さ。

『グローバル変数ってヤツ？』
「そういうこと。で、 OnCreate() の最後に３行追加します」

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    // 中略。 Version 10.19 ( No.197 ) のと同じ。

    // ツールバーの高さを取得します。
    RECT stRect;
    GetWindowRect( hToolBarWnd, &stRect );
    g_iToolBarHeight = stRect.bottom - stRect.top;

    return 0;
}

『 GetWindowRect() ってウィンドウの位置とか高さとか取得するのだよ
ね。 hToolBarWnd はツールバーのウィンドウハンドル……そっか、これで
ツールバーの高さがわかるんだ』
「この API でツールバーのウィンドウの上側の位置と下側の位置を取得し
て、それを引けば高さになるから。で、さっきの 28 の所は」

    TextOut
        ( hDC
        , 0
        , g_iToolBarHeight
        , pchText
        , strlen( pchText ) 
        );

『ってするとちょうどツールバーの高さの分だけ下に表示するわけね』
「あ、ちなみに、 MFC の場合にはまた違った状態だから。 Version 9.01 
( No.162 ) で紹介したビューウィンドウって憶えてる？」
『うん、ウィンドウの真ん中の白い四角いウィンドウ……あ！』
「そういうこと。今は大元のウィンドウのクライアントエリアに描いてたか
らツールバーを避けなきゃいけなかったけど」
『そもそも、そのツールバーの中にウィンドウひとつ作って、そこに表示す
ればいいんだ！』
「それが MFC のビューウィンドウにあたるってことだね」
『ってことは、今はフレームウィンドウに直に描いてるようなもんなのね。
じゃあさ、 SDK でもビューウィンドウ……って作れないの？』
「もちろん作れるよ。 MFC だって SDK の上に成り立ってるものなんだか
ら。ただ……」
『ただ？』
「実際には管理とか難しいから。たとえば、今ツールバーの問題が出たけ
ど、同じようにツールバーやステータスバーの中に入るように」
『ウィンドウのサイズ決めて、表示しなきゃいけない……』
「しかも、フレームウィンドウのリサイズをしたら」
『げっ、それにもあわせなきゃいけない！！』
「そういうこと。 MFC はそこまでの枠組みがしっかりできてるからいいけ
ど」
『 SDK だけだと、そこも自分で作らなきゃいけないわけね……ふー』
「だから、今回はとりあえずフレームウィンドウだけで、ね。では、目的
だった、テキストエディタもどきを作ります。まず、さっきみたいにグロー
バル変数を OnCreate() を置きます」

// 入力文字列を取っておくための変数。
const int TEXT_MAX_LENGTH = 256;
char g_pchText[TEXT_MAX_LENGTH + 1];

『前にテキストエディタもどきを作ったときには、メンバ変数に入れていた
し、 String クラス使ってたよね』
「そう、その辺は MFC との違いだし、実はその辺は非常に大きな意味を
持ってるんだけど」
『それはまた先の話？』
「そういうこと。で、この変数には入力した文字列を入れておきます。入れ
るのはもちろん、キー入力したときのハンドラ」
『 OnChar() ね』
「そういうこと」

// キー入力がありました。
LRESULT OnChar
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    // 入力された文字を取り出して、文字列にします。
    char ch[2];
    ch[0] = (char)p_wParam;
    ch[1] = '\0';
    // それをくっつけます。
    if( strlen( g_pchText ) < TEXT_MAX_LENGTH )
    {
        // 文字列サイズをオーバーしてないのでくっつけまず。
        strcat( g_pchText, ch );
    }

    // そして再描画。
    InvalidateRect( p_hWnd, NULL, TRUE );
    return 0;
}

『 strcat() って？』
「第１引数の文字配列に、第２引数の文字列をくっつけるランタイム。一応
Version 5.07 ( No.072 ) でやったんだけどね」
『そんな昔のこと忘れたし……１回しか出てきてないし……』
「あとわかりにくいのはこれかな」

    char ch[2];
    ch[0] = (char)p_wParam;
    ch[1] = '\0';

「まず、 WM_CHAR は、入力された文字を WPARAM に入れて渡してきます」
『それを char にキャストして受け取るわけよね。でも配列？』
「そう、 strcat() に渡すためには文字列じゃないといけないから」
『その辺、ちょっとわかんないかも』
「ま、それは少ししたらみっちり教えるから大丈夫」
『少ししたら？』
「うん、結構すぐ。 InvalidateRect() はいいよね」
『再描画する API だね。だから、これを呼ぶと再描画されるから……どう
なるんだっけ』
「再描画するメッセージは？」
『 WM_PAINT だから、 OnPaint() が呼ばれる！』
「そういうこと」

// 再描画します。
LRESULT OnPaint
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    PAINTSTRUCT stPaintStruct;
    HDC hDC
         = ::BeginPaint
                ( p_hWnd
                , &stPaintStruct 
                );
    // この行は削除。
    TextOut
        ( hDC
        , 0
        , g_iToolBarHeight
        , g_pchText    // ここと、
        , strlen( g_pchText ) // ここを修正。
        );

    ::EndPaint
        ( p_hWnd
        , &stPaintStruct 
        );

    return 0;
}

『表示する文字をさっきのに変えたのね』
「こうすれば」
『おおっ、またもやテキストエディタもどきに！！』
「ここまでは、はっきり言ってこれまでの復習だから、よく読み返して、ど
こがどう継ながってるのか理解してね」
『はーい』

/*
    Preview Next Story!
*/
「 SDK 編は来週で終わりです」
『そっか、 MFC でやったのはもうだいたいやったんだね。次は？』
「みっちり基礎を勉強してもらいます」
『げげ！』
「でも実用度はかなり高いと思うよ」
『ほんとかなー』
「本当……だけど、つまらないと思う」
『げげげ！』
「というわけで次回」
＜ Version 10.22 SDK のまとめ、そして文字列へ ＞
『につづく！』
「でも絶対役に立つから！！」
『ほんとかなー』


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

