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

    KAB-studio.h


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

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

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

・KAB-studio.h 特別変更
　この日の号だけ、 KAB-studio.h がちょっとだけ拡大します。先週の分が
増えるだけだけど。
　（……今気付いたんだけど、拡大した分ってお休みの日だよ……）


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

2002/05/09 (Thu)
　旅行出発まであと２時間。昨日はかぶヘッダーと Kanon サントラ。今日
は朝から旅行の準備。特急券買ったり。昨日のヒット数高かったなぁ。

2002/05/10 (Fri)
　作者旅行のためお休み。

2002/05/11 (Sat)
　作者旅行のためお休み。

2002/05/12 (Sun)
　作者旅行のためお休み。

2002/05/13 (Mon)
　作者旅行のためお休み。

2002/05/14 (Tue)
　旅行からただいま。９日は成田エクスプレスで成田へ。１０日に８時間か
けてブリスベンへ。オーストラリアって沖縄っぽい。コアラかわいかったけ
どそれ以上にカンガルーがラブリー。１１日、午前中はスキューバダイビン
グ、午後は実弾射撃（爆）。４４マグナムはすごかった……。１２日にコ
ミックスを探しにいくも閉まってるし。雑誌とかテレビとか。午後は会議と
船上パーティー。１３日に成田へ。バスで実家へ。１４日はもちろんお仕
事。貯まってるテレビを見たり。

2002/05/15 (Wed)
　新しいお仕事は VC++ と Pro*C でデータベースアクセス。期待大。初め
ての有料メルマガ、 Java で納得オブジェクト指向プログラミングが終了。
難しいもんですなぁ。

2002/05/16 (Thu)
　久しぶりの残業で疲れました。 Pro*C をどう使うかが鍵？　ヤフオクで
Kanon 初回限定版を手に入れ損ねる。忙しくてテレビ見てない〜。なんとか
かぶヘッダーを書かないと。

2002/05/17 (Fri)
　疲れてるような？　９時半までお仕事。プログラミングだからか精神的に
は悪くないかも。 CSV 操作のコツ？　リモートデバッガってよくわかんな
い……。む、やっぱ疲れてるかも。

2002/05/18 (Sat)
　４０００円キャッシュバック。お昼からお仕事。 Pro*C って難しい。ウ
イイレはイタリアがいい感じかも。テレビはだぁ！だぁ！だぁ！がかなり良
かったです〜。そして疲れてない日。来るのか？


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第四章　ふたりの勇者　−４−

「どうする？　俺ひとりで行ってこようか？」
　ファミリーレストランでふたりは封筒を交換して読みあっていた。
　場所を選んだのは舞だった。どうやら正解だったらしく、夕方前で客は少
ないうえ、雅樹もそれほど目立ってはいないようだった。
「ううん、私も行く。どんな用があるのか分かんないけど、とりあえず、あ
の人達と話くらいしてみたいかな」
　三角に切ったホットケーキにぱくつきながら、そう言った。
「よくは判らないが、あいつらは、俺達と敵対しようとは思ってないようだ
な」
「あの子供たち？」
「ああ。一緒にいた化け物、あれが本当の敵なんだろうな。ま、猫かぶって
近寄ってくるヤツも結構怪しいけどな」
　そう言って、雅樹はチョコパフェを食べる。食べる度に、窓側に空けてい
るひとり分の空間と話をする。
「……なんで、私たちなのかな」
　舞の、その苦笑いに戸惑いながらも、雅樹は考えた。
「そうだな……そういや、なんでなんだ？」
　雅樹は隣に訊く。そして、答を聞いて納得する。
「泉の力を持ってるからじゃないか、とさ」
「じゃぁ、私たち以外の＜泉の力を受け継ぐもの＞は？」
「ああ……」
　雅樹のその表情ははっきりしていなかった。
「……他の泉の場所とは交流がないんだ。俺がおまえんとこ行ったのも偶然
だったし、結白さんも他の泉のことは知らないって言ってた」
「じゃぁ、他の人達も、私たちのことを知らないんだ。何かが起こりつつあ
ることも」
「いや、そういうことじゃないと思う」
「え？」
　雅樹は、顔を背けるように外へと目を向けた。
「多分、力を持つのは俺達だけだ。＜力を受け継ぐもの＞は必ずしも存在す
るわけじゃない。もし、誰も受け継ぐことなく百年も二百年も経ったとした
ら……」
　舞には、その状況が手に取るように分かった。もし自分がかつていた碧き
泉で、その泉の力を信じられなくなったら――あのような場所に長く住み続
けることは、並大抵の努力ではかなわない。
「でな」
　気付けば、雅樹は舞を見つめていた。そのことに突然気づいて舞は少し驚
いた。顔を少し赤らめて。
「な、何？」
「穂香と相談した結果だな、七月になったらおまえん所の泉に行って来る」
「母さんの所？」
「ああ。結白さんの所に行けば、泉の場所くらいは判ると思うんだ。そした
ら、残りのふたつの泉も回ってみる」
「……ふうん」
　最後の一切れを食べながら、そう言うことしか舞にはできなかった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『 Java メルマガも終わっちゃったね』
「そうそう、バックナンバーなんだけど」
『結局どうなったの？』
「うーん、当分は無理かも」
『ええっ！？　１ヶ月後くらいには、とか言ってなかった？』
「数ヶ月先、って思った方がいいかも」
『じゃあ、もし必要なら今のうちに買っといた方がいいってことね』
「そうとも言い切れないかも」
『げ、いい売り込み時なのにそゆこと言う？』
「次に売るときは安くなるかもしれないし」
『高くなるってことは？』
「１ヶ月４００円で９ヶ月だから」
『３６００円、結構な額よね……』
「それを考えると、ね……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


////////////////////////////////////////////////////////////////////
/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/

　Version 8.16
API だけでツリーコントロール操作

「さて、今回からまた Version 8.10 ( No.152 )まで使ってた 
SimpleDialog に戻ります」
『これから MFC 使わないでやってくわけね』
「でも大丈夫、やり方はほとんど教えてあるから」
『確かに面倒な方法色々教わったからねー』
「その辺を思い出してもらいつつ、 SimpleDialog を開いて、 IDD_MAIN に
ツリービューコントロールを貼り付けて」
『ほい。 ID は IDC_TREE_MAIN でいい？』
「そうだね、その方が分かりやすいかな。あと、プロパティの【スタイル】
ページで【ボタンあり】と【線を表示】と【最上位にも線を表示】」
『 Version 8.11 ( No.153 ) と同じね。そのあとは…… MFC の時は 
InitDialog() でアイテムを追加したけど』
「それと同じことをします。 InitDialog() は WM_INITDIALOG ってメッ
セージが送られてきた時に呼ばれるメンバ関数」
『ってことは、ダイアログプロシージャの中で WM_INITDIALOG が来るのを
待ってればいいんだ』
「そゆこと。えーっと、久しぶりだから Main.cpp 全行見ておこうか」

#include <Windows.h>
#include <Commctrl.h>    // この行を追加。
#include <stdio.h>

#include "resource.h"

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_INITDIALOG )
    {
        // ダイアログの初期化。
        TVINSERTSTRUCT stInsertItem;
        stInsertItem.hParent = TVI_ROOT;
        stInsertItem.hInsertAfter = TVI_LAST;
        stInsertItem.item.mask = TVIF_TEXT;
        stInsertItem.item.pszText = "アイテム";
        
        HWND hMainTreeWnd
            = GetDlgItem( p_hDlgWnd, IDC_TREE_MAIN );
        SendMessage
            ( hMainTreeWnd
            , TVM_INSERTITEM
            , 0
            , (LPARAM)&stInsertItem
            );
        return TRUE;
    }
    else if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == IDOK )
        {
            // OK ボタンが押されました。
            EndDialog( p_hDlgWnd, IDOK );
            return TRUE;
        }
    }

    return FALSE;
}


// WinMain() 。
int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    DialogBox
        ( p_hInstance
        , MAKEINTRESOURCE( IDD_MAIN )
        , NULL
        , DialogProc
        );

    return 0;
}

『こうやって見てみると長いねー』
「っていうより、１行で書いてもいいところを複数行に分けてるから長い、
っていう方が正しいかも」
『水希ちゃんはいつもこういうふうに書いてるの？』
「そうだよ。特に関数の引数の所はこういうふうに改行して、いつもはそこ
にコメント加えてるんだけどね」
『相変わらずまめねー』
「そうかな……」
『んっと、前と変わってるとこってどこ？』
「まず」

#include <Windows.h>
#include <Commctrl.h>    // この行を追加。
#include <stdio.h>

『インクルードファイルが増えてるね』
「ツリービューコントロールを使う時には Commctrl.h ってファイルをイン
クルードしなきゃいけないから」
『 MFC は勝手にインクルードしてくれてる？』
「そう。ちなみに Commctrl.h は〈コモンコントロール〉を使う時にインク
ルードするヘッダーファイルです」
『……あ、なんかデジャブ……』
「 Version 3.10 ( No035 ) で教えてたね……」
『次の違いは？』
「ダイアログプロシージャの中の WM_INITDIALOG のところ」

    if( p_uiMessage == WM_INITDIALOG )
    {
        // ダイアログの初期化。
        TVINSERTSTRUCT stInsertItem;
        stInsertItem.hParent = TVI_ROOT;
        stInsertItem.hInsertAfter = TVI_LAST;
        stInsertItem.item.mask = TVIF_TEXT;
        stInsertItem.item.pszText = "アイテム";
        
        HWND hMainTreeWnd
            = GetDlgItem( p_hDlgWnd, IDC_TREE_MAIN );
        SendMessage
            ( hMainTreeWnd
            , TVM_INSERTITEM
            , 0
            , (LPARAM)&stInsertItem
            );
        return TRUE;
    }

「これだけ長いと、別の関数にした方がいいかも」
『えっと、中身は Version 8.13 ( No.155 ) のに似てるね』
「 TVINSERTSTRUCT のメンバ変数に色々入れてる部分は同じ」
『 GetDlgItem() はどっかで見覚えが……あ、ダイアログコントロールのハ
ンドルを取るのだ！』
「 Version 5.26 ( No.091 ) で教えたけど、あれは CWnd::GetDlgItem() 
つまり MFC のだから」
『そだね、あのときはポインタだったけど、今度の API のはウィンドウハ
ンドルが返ってきてる。それに引数も違う』
「第１引数が加わってて、この第１引数に、コントロールを持ってるダイア
ログのハンドルを渡します」
『 CWnd::GetDlgItem() の時は渡さなくていいの？』
「 CWnd の中にメンバ変数として持ってるからね」
『あ、そっか』
「 API では、ダイアログプロシージャの引数として渡された、ダイアログ
のウィンドウハンドルと、ウィンドウハンドルが欲しいコントロールの ID 
を渡せば」
『そのコントロールのウィンドウハンドルがもらえるわけね』
「で、そのウィンドウに SendMessage() でツリービューコントロールを操
作するメッセージを送ります」
『そっか、メッセージを受け取るのがダイアログプロシージャ、メッセージ
を送るのは SendMessage() 、って分担するんだ』
「そゆこと。 Version 8.12 ( No.154 ) でちょっと触れたけど、 TVM_ が
ツリービューコントロールを操作するためのメッセージ」
『 TVM_INSERTITEM がアイテムをインサートするメッセージね。 
CTreeCtrl::InsertItem() と同じ機能、ってゆーかこのメンバ関数も 
TVM_INSERTITEM を SendMessage() してるってこと？』
「そゆこと。 CTreeCtrl::InsertItem で検索すると見つかるから」
『んじゃ見とこう。おー、ホントに同じ感じに SendMessage() してる』
「この SendMessage() の LPARAM に TVINSERTSTRUCT 構造体へのポインタ
を渡せば、その構造体どおりのアイテムが追加されます」
『なんか無理矢理。 WPARAM と LPARAM 使う時ってこれって仕方ないの？』
「残念ながら、ね」
『しょうがないならいーや。これで追加できた、と。他の変更点は？』
「ないよ。 else if の所は OK ボタンを押した時にダイアログを閉じるの
だし」
『 Version 8.09 ( No.151 ) のと同じね』
「 WinMain() は変化なし。今回の中で大事な部分は WM_INITDIALOG の所だ
から」
『これだけ見ると、ホントにこれまでのの応用だけだね』
「そうだよ。 TVINSERTSTRUCT は MFC の方で使ってもらったし、メッセー
ジですべてやりとりするってことが分かってれば」
『混乱はしないかな。でもめんどいね』
「それは仕方ないね。この辺が MFC の便利な部分だから」
『あ！　最後に質問！』
「はい火美ちゃん」
『まだ教えてもらってなかった、 WPARAM と LPARAM の W と L ってなんな
の？』
「あ、そういえば。これは僕も確かなことは知らないんだけど、昔、つまり
ウィンドウズ９５より前の頃の名残みたい」
『お、また昔話ね』
「ウィンドウズ３．１から９５って大きく変わったからね。あ、これは次の
回にちゃんと説明しよう！」
『え？』

/*
    Preview Next Story!
*/
「というわけで次回は歴史の時間です」
『そんなの必要なの？』
「僕は必要かな」
『どして？』
「理由が分かるから」
『理由？』
「そう、なんでそういう名前なのか、とかの理由が」
『というわけで次回』
＜ Version 8.17 ウィンドウズの歴史 ＞
「につづく！」
『理由なんて分かんなくてもいいんじゃない？』
「ま、それはそれで」


////////////////////////////////////////////////////////////////////
/*                ２００２年５月２７日（月）の更新                */
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 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

