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

    KAB-studio.h


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

    送信日： 2003/03/17(Mon) No.198
    配信数： 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/09 (Sun)
　３月表紙壁紙。ほとはーです。いまいち？　やや手抜き。体力落ちてるの
かも。フレッツＡＤＳＬに入れない？

2003/03/10 (Mon)
　眠い。バグ取り。横浜で色々購入。月姫ごちゃまぜがいい感じ。しくじっ
たか？　中古パソコン物色中。自宅サーバー構成用に。でも意外と高い。

2003/03/11 (Tue)
　第６リリースでバグが。最近ホント眠い。 WOLF'S RAIN は女子向け？　
そしてフリーウェア。そしてジャンクＰＣ。そしてノートサーバー。

2003/03/12 (Wed)
　疲れピーク。第６リリースで留守番してデバッグ。余裕出てきたから土日
しっかり休めるかも。

2003/03/13 (Thu)
　今日も死ぬほど眠かった。 Java と JavaScript とで同じメソッドを用意
しなきゃいけないのがめんどい。横浜で色々購入。ななか＋はメロンブック
スで見かけたな。そしてフリーウェアの対応ＯＳ。バージョンアップできな
いから……。

2003/03/14 (Fri)
　久々２連休！　仕事は PreparedStatement の close() し忘れとか。

2003/03/15 (Sat)
　無駄に過ごした１日？　かぶヘッダーとか書いてから、フレッツＡＤＳＬ
を電話ボックスから申し込み。パスポートのコピーを送ったり。家のマシン
をいじってたら再セットアップするハメに。ウェブサーバーを置きたいのは
容量不足の関係。メールサーバーとかも立てるのは大変かも。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.20
SDK だけで作るテキストエディタもどき

「さて、 SDK 編最後はテキストエディタもどきです」
『 Version 9.15 ( No.176 ) で MFC 使ってやった部分ね』
「そう、あれを SDK だけで作ってみます。 SDK だけで作る分、簡単なとこ
ろもあるし、難しい所もあるから」
『ツールバーやステータスバーもそうだったものね』
「では、まずキー入力を受け取るようにします」
『 Version 10.06 ( No.10.06 ) でやったのだね』
「具体的にはこうします」

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_CREATE )
    {
        return OnCreate( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_DESTROY )
    {
        return OnDestroy();
    }
    else 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 );
        }
    }
    else if( p_uiMessage == WM_CHAR )
    {
        return OnChar( p_hWnd, p_wParam, p_lParam );
    }

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

『おなじみ WM_CHAR だね』
「もちろん、本格的なテキストエディタにするなら WM_KEYDOWN とかにも対
応しないといけないけどね」
『カーソルキーとか使えないもんね。……そういえば』
「そういえば？」
『この WM_CHAR が使えるのって TranslateMessage() 使ってるからだよね』
「そう、この API が WM_KEYDOWN とかを WM_CHAR に変換してるから」
『……その時点で SDK の方が面倒じゃん』
「でも、メッセージループなんて一度作っちゃったら他のプログラムでも使
い回せるよ？」
『あ、そういえば』
「で、それの大がかりなのが MFC ってこと」
『ぇ？』
「 MFC のメッセージループだって、他の誰かが作ったメッセージループ
ってだけで、それを使い回してるのは同じってこと」
『あ……そういう意味じゃ、あたしが作ったメッセージループをあたしが使
い回しても、 MFC のメッセージループを使っても同じなんだ』
「そういうこと。 MFC みたいな大きなライブラリを使ってると構えちゃう
かもしれないけど、そんなに難しく考える必要はないから」
『でもやっぱレベル違うし……』
「まあね……で。この WM_CHAR が送られてきた時に呼ばれる関数 OnChar() 
は、次のような感じ」

// キー入力がありました。
LRESULT OnChar
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    char pch[256];
    sprintf( pch, "%c", (char)p_wParam );
    OutputDebugString( pch );

    return 0;
}

『 MFC の時は TRACE() だけだったのに……』
「 Version 5.07 ( No.072 ) でやったでしょ、 TRACE() と同じに使える
って」
『あー』
「 TRACE() の変わりに、文字を文字列に変換するのに sprintf() を、アウ
トプットウィンドウに出力するのに OutputDebugString() を使ってます」
『ってことは、キーは p_wParam に入ってるんだ』
「そういうこと。とりあえずここで試してみて」
『ほい。おー、アウトプットウィンドウにキーが出る！　あの時と同じ〜』
「では次に、再描画の部分を作ります。二度手間になっちゃうけど、ウィン
ドウプロシージャをもう一度修正して」

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_CREATE )
    {
        return OnCreate( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_DESTROY )
    {
        return OnDestroy();
    }
    else 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 );
        }
    }
    else if( p_uiMessage == WM_CHAR )
    {
        return OnChar( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_PAINT )
    {
        return OnPaint( p_hWnd, p_wParam, p_lParam );
    }

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

「 WM_PAINT の部分を追加しました」
『あ、そっか、 MFC で使った OnDraw() ってないんだよね』
「そう、本当は再描画するときは WM_PAINT が送られてきて、 MFC はその
時に OnDraw() を呼んでました。で、 SDK の方は代わりに OnPaint() 
って関数を作って呼ぶようにします。それがこれ」

// 再描画します。
LRESULT OnPaint
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    PAINTSTRUCT stPaintStruct;
    HDC hDC
         = ::BeginPaint
                ( p_hWnd
                , &stPaintStruct 
                );

    const char pchText[] = "あいうえお";
    TextOut
        ( hDC
        , 0
        , 28
        , pchText
        , strlen( pchText ) 
        );

    ::EndPaint
        ( p_hWnd
        , &stPaintStruct 
        );

    return 0;
}

『あれ、これってどっかでみたよーな』
「 Version 7.15 ( No.135 ) と同じだよ」
『あ！　そっか、ダイアログでデバイスコンテキスト使ったときのと同じな
んだ』
「ダイアログだと MFC のシステムが備わってなかったから、 SDK と同じ方
法で描画したんです。だからあの時と同じ」
『でもちょっと違うよね』
「あの時はスタティックコントロールのウィンドウハンドルを使ったけど、
今回はウィンドウプロシージャのをそのまま使ってるから」
『 p_hWnd ね。それより……』

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

「の 28 っていうのが気になるんだけど」
『それは次回に続く！』
「ええっ！？」

/*
    Preview Next Story!
*/
『 28 って謎な数字』
「こういうのって難しいんだよね」
『何が？』
「本当はこういうふうに直に書くのはいけないんだけど」
『だよね。前にそんなのきいたよーな』
「でも、最初に教える時はこういう具体的な数字の方が解りやすいから」
『ならそっちの方がいいじゃん』
「というわけで次回」
＜ Version 10.21 ツールバーとクライアントエリア ＞
『につづく！』
「でもさ、これで次回見なかったりされると困る……」
『いるの？』
「毎週しっかり読むのは大変じゃないかな」
『確かに……』


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

