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

    KAB-studio.h


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

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

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

・３月表紙壁紙！
　３月表紙壁紙はなんとほとはー！　……手抜きとか言わないで（爆）。
ダウンロードはCG Galleryにて。
[CG Gallery]
http://www.kab-studio.com/CG/Gallery/


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

2003/03/02 (Sun)
　かなり眠い。午前中は洗濯したり。午後は貯まってたコミックスを見た
り。ダーマ＆グレッグ復活。ナージャ第１話、貯まってたガンダムＳＥＥＤ
も。そして PHS バックアップ。そして本。

2003/03/03 (Mon)
　 Java コーディング。ファイルコピー用 API がない？　最終リリースが
遅れて少し楽に。次の表紙壁紙はほとはーに決定。

2003/03/04 (Tue)
　Java デバッグ。コレクションのソートが STL っぽい。 C++ の方がい
い、と言っておきたい。最近はダイエットのために魚中心。 WOLF'S RAIN 
声優さん聞き間違えた……。

2003/03/05 (Wed)
　最終リリース日前日でてんてこまい。 Struts 便利そう。これがあったら
どんなに楽だったか……。

2003/03/06 (Thu)
　単純だけど気を付けつつしなきゃいけないコーディング。すんごく面白い
バグ。 CLANNAD ってまだ先なのね。 CG WORLD でコマ割りの勉強。そして 
Struts 。かなり便利そうだなぁ。そしてザウルス。懐かしい想い出も。

2003/03/07 (Fri)
　８日の朝７時半。ひさびさに徹ゲーでデドアラ。さすがに眠いかも。昨日
はバグ取り。でも土曜も仕事……。

2003/03/08 (Sat)
　２時半から８時までお仕事。クモの巣状。 Bean でうまく管理できたら
なぁ。帰ってからはかなり眠い。微妙に忙しいし。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.19
ツールバーを作ってみよう

「さて、今回は SDK でツールバーを作ってみます」
『ステータスバーと同じくって感じね』
「ただ、今回はさらに MFC のものとはかけ離れてるから」
『そうなんだ』
「とういうより、 MFC の方がややこしいことしてるっぽい……。ま、とり
あえず作ってみようか。まずはリソースにツールバーを挿入します」
『そっか、 MFC の時って最初からあったもんね』
「まずワークスペースでリソースを表示して【SimpleWindow リソース】を
右クリックして【挿入】 を選んで」
『ダイアログ出た。【Toolbar】を選べばいいんだよね』
「うん、そうするとツールバーができると思うから」
『 ID とかはどうするの？』
「まず、ボタンをふたつにして、左側は赤で、右側は青で塗り潰して」
『ほい。この辺は Version 9.11 ( No.172 ) を参照にしてと。 ID は？』
「これは別の場所で指定するからここでは指定しなくていいよ。次に、
ツールバーそのものの ID を IDR_TOOLBAR_MAIN にして」
『ほい。って、ツールバーそのものの ID ってどう変えるの？』
「ワークスペースの IDR_TOOLBAR1 の上で右クリックでプロパティ」
『あ、ホントだ。って前になんかで聞いたねそれ……』
「この辺はどのリソースも同じだからね。で、ここでまず確認して欲しいの
は、このプロパティの右側」
『赤と青だね』
「これって、ボタンとは違うでしょ」
『あ、ホントだ。ボタンの形してないし、赤と青の間が詰まってるし』
「左側に【ファイル名】ってあるでしょ」
『 toolbar1.bmp ってある。ビットマップファイル？』
「そう、このビットマップにこの赤と青の絵が描かれてるってことです」
『ほほう。これが後で重要になるの？』
「重要になるんです。じゃあこれを閉じて、今度は赤でも青でもいいからボ
タンをダブルクリックして」
『ほい、ボタンのプロパティが出たよ』
「さっき言ったように ID はここでは指定しないから。で、ここで重要なの
は幅と高さ」
『 16 と 15 だね』
「このボタンのマス目が、横が 16 ドット、縦が 15 ドットってこと。って
ことは、さっきのビットマップのサイズは？」
『あ、えーっと、間が詰まってたから、横は 32 ドット、縦は 15 ドット
ってことだね』
「そういうこと。これがあとで重要になるから。さて、次はプログラムの
方。まず OnMenuTest() を修正して」

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

『あら、シンプルに』
「ステータスバーのテストの時は色々してたけど、今回はこのコマンドが実
行されたことだけ分かればいいから。同じく、ウィンドウプロシージャから
はステータスバーの通知メッセージの部分を取り除きます」

// ウィンドウプロシージャ。
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 );
        }
    }

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

『最後の方の if がなくなっただけだね』
「最後に本命。 OnCreate() の部分をこう書き変えてください」

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    const int TOOLBAR_BUTTON_NUM = 2;
    TBBUTTON pstTbButton[TOOLBAR_BUTTON_NUM]; 
    // ひとつめのボタンのデータをセット。
    pstTbButton[0].iBitmap = 0;
    pstTbButton[0].idCommand = ID_MENU_TEST;
    pstTbButton[0].fsState = TBSTATE_ENABLED;
    pstTbButton[0].fsStyle = TBSTYLE_BUTTON;
    pstTbButton[0].dwData = 0;
    pstTbButton[0].iString = 0;

    // ふたつめのボタンのデータをセット。
    pstTbButton[1].iBitmap = 1;
    pstTbButton[1].idCommand = 0;
    pstTbButton[1].fsState = TBSTATE_ENABLED;
    pstTbButton[1].fsStyle = TBSTYLE_BUTTON;
    pstTbButton[1].dwData = 0;
    pstTbButton[1].iString = 0;

    // ツールバーを作ります。
    HWND hToolBarWnd = CreateToolbarEx
        ( p_hWnd 
        , WS_CHILD | WS_VISIBLE
        , 100
        , TOOLBAR_BUTTON_NUM
        , GetModuleHandle( NULL )
        , IDR_TOOLBAR_MAIN 
        , pstTbButton, TOOLBAR_BUTTON_NUM
        , 0, 0 
        , 16, 15 
        , sizeof( TBBUTTON )
        );
    if( hToolBarWnd == NULL )
    {
        // ツールバーが作られませんでした。
        return -1;
    }

    return 0;
}

『長いような長くないような』
「たぶん見た目よりは長くないと思うよ。まず、ツールバーのボタンの情報
は TBBUTTON という構造体の配列に入れます。それがこれ」

    const int TOOLBAR_BUTTON_NUM = 2;
    TBBUTTON pstTbButton[TOOLBAR_BUTTON_NUM]; 

「 2 なのはボタンの数が２個だから。で、この配列のひとつひとつに値を
入れます」

    pstTbButton[0].iBitmap = 0;
    pstTbButton[0].idCommand = ID_MENU_TEST;
    pstTbButton[0].fsState = TBSTATE_ENABLED;
    pstTbButton[0].fsStyle = TBSTYLE_BUTTON;
    pstTbButton[0].dwData = 0;
    pstTbButton[0].iString = 0;

「 TBBUTTON::iBitmap はボタンの何番目のボタンか。 
TBBUTTON::idCommand はボタンが押されたときに送られる ID 」
『あ、ここで指定してるからさっきのは要らないんだね』
「そういうこと。あとのはパス」
『パスぅ？』
「こっちはどのボタンでも同じで大丈夫だから」
『そういえば、ふたつめのボタンも同じだね』
「ボタン毎に変えるのは TBBUTTON::iBitmap と TBBUTTON::idCommand って
ことだね。で、そのあとツールバーを作ります。その中でも重要なものを
ピックアップします。まず第３引数」

        , 100

「これはツールバーそのものの ID 」
『あれ？　これって IDR_TOOLBAR_MAIN じゃないの？』
「そう、違うんです。これは CreateStatusWindow() の第４引数と同じよう
な感じ」
『ツールバーの操作をするときに使う……のは分かるんだけど、なんで 
IDR_TOOLBAR_MAIN じゃないの？』
「 IDR_TOOLBAR_MAIN はツールバーじゃなくて、ビットマップの ID なんで
す。アイコンの ID に近いかも」
『アイコン、ねぇ……』
「それが重要なのが、これ」

        , 16, 15 

『 16 と 15 ……あ、ボタンのサイズ』
「実は、 CreateStatusWindow() は IDR_TOOLBAR_MAIN ビットマップから 
16 ドットずつ切り抜いてボタンに貼り付けてるんです」
『切り抜く？？』
「つまり、こういうこと」

・ボタンそれぞれの情報（ ID とか） : pstTbButton
・ボタンに貼り付ける絵柄 : IDR_TOOLBAR_MAIN

「というふうに役割が分けられてるんです」
『……なんか、ツールバーリソースの意味ってあるの？』
「あんまりないかも。それこそ MFC との一番の違いかも」

/*
    Preview Next Story!
*/
『ツールバーはかなり MFC と違うよね』
「ツールバーの場合、 MFC との比較はあまり勉強にならないかも」
『なんで？』
「本当に作りが違うから」
『……なら、 MFC の方の仕組みもわかってないといけないんじゃない？』
「それはさすがにかなり先かも」
『まだ道のりは遠いのね……』
「というわけで次回」
＜ Version 10.20 SDK だけで作るテキストエディタもどき ＞
『につづく！』
「このテキストエディタもどきの解説で SDK 編は最後です」
『長かったねー』
「でも Version 11 はさらに長いんだけどね」
『え”』


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

