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

    KAB-studio.h


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

    送信日： 2002/04/22(Mon) No.154
    配信数： 3790 ( 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/

2002/04/14 (Sun)
　 Java メルマガのページを更新。それとぷらとわ１話。公立学校週休二
日、なんか反対意見多いのはなぜに……。

2002/04/15 (Mon)
　お仕事はちょっとのんびり？　いいアイディアが浮かんだんで簡単にでき
るかも。テストファーストだと感慨深くない……。悪夢モード。 Java メル
マガの廃刊が決定。バックナンバーは一時的になくなるけど。

2002/04/16 (Tue)
　久々客先へ。なんか手間取った。ウイイレ５、やっと点が取れるように
なってきた。テレビは先週の藍より青しがいい感じ。今クールはやっぱ満月
をさがしてが一番？

2002/04/17 (Wed)
　アプリひとつ完成。テストファーストってホントに味気ない……。ソフト
ウェア開発は受けません。これからの楽しみなこと一覧。

2002/04/18 (Thu)
　プログラムを厳密に考えるようになる。テストファーストは偉大だ。横浜
で壱八家のラーメン。帰ってからはウイイレ三昧。多人数プレイの想い出。

2002/04/19 (Fri)
　プログラムひとつ完成。帰ってからはウイイレ対戦。まだまだだなぁ。

2002/04/20 (Sat)
　ホットハーブ描いたりぷらとわ書いたり。ホットハーブはもうすぐ第２章
に。料理は豚汁。先週はイタリアン。「ほしのこえ」はかなりいい感じで
す。これに追い付くのは指南の技だ……。客先でトラブルがあってビビる。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.12
ツリーアイテム

「前回に引き続き、ツリービューコントロールについて見ていきます」
『この前はアイテムの追加をしたんだよね』
「今回もそう。まず復習から」

BOOL CMfcDialogDlg::OnInitDialog()
{
// 略。
    // TODO: 特別な初期化を行う時はこの場所に追加してください。
    HTREEITEM hParentItem
        = m_cMainTree.InsertItem( "１番目のアイテム" );
    m_cMainTree.InsertItem( "２番目のアイテム", hParentItem );

    return TRUE;
}

『 CTreeCtrl::InsertItem() でアイテム追加、第２引数を省略すると親と
して追加されて、そこにアイテムのハンドルを渡すとその子アイテムとして
追加される、と』
「そゆこと。第２引数を省略すると TVI_ROOT が渡されて、これが親アイテ
ムとして追加、って指定になるから」
『ってことは、』

    m_cMainTree.InsertItem( "１番目のアイテム", TVI_ROOT );

『でも親アイテムとして追加できるわけね。そういえば、第３引数も省略さ
れてたけど、あれは？』
「第３引数では〈どの子アイテムの下に入れるか〉を指定します」
『？』
「んー、第２引数は親子関係、ツリービューコントロールで言えば〈横〉の
関係を変えるものだったけど、第３引数は〈縦〉の関係を変えるもの」
『あー、そういう意味で〈下に〉ってことね』
「ま、実際に見てもらった方がいいかも」

BOOL CMfcDialogDlg::OnInitDialog()
{
// 略。
    // TODO: 特別な初期化を行う時はこの場所に追加してください。
    HTREEITEM h1stItem
        = m_cMainTree.InsertItem( "１番目のアイテム" );
    m_cMainTree.InsertItem( "３番目のアイテム" );
    m_cMainTree.InsertItem( "２番目のアイテム", TVI_ROOT, h1stItem );

    return TRUE;
}

『３回目の追加で第３引数に……１回目に追加したアイテムのハンドルを渡
すと……その１回目に追加したアイテムの下にアイテムが挿入される、と』
「これでどこにでも追加できるでしょ」
『一番上に追加するときは？』
「第３引数に TVI_FIRST を渡せばＯＫ。ちなみに省略すると TVI_LAST が
渡されて」
『これは最後に追加されるわけね』
「そゆこと。ここまでやってみてどう？」
『結構簡単だね』
「でしょう。でも、これは MFC だから」
『 MFC 使わないと面倒？』
「そう、面倒。というわけでその方法をこれから説明します」
『げげ！』
「というよりそのためにこの MFC の例を出したんだし」
『そうだったのか……』
「まず、 MFC を使わないでツリービューコントロールにアイテムを追加す
るときには TVM_INSERTITEM ってメッセージを使います」
『最初に TVM_ が付くのがツリービューコントロールのメッセージ？』
「操作する時はね。通知メッセージは」
『 TVN_ ！』
「そう。この辺は規則性あるから分かるよね」
『 M か N かってだけだし』
「まーね。で、この TVM_INSERTITEM のリファレンスを見ると」
『 WPAPAM は 0 、 LPTVINSERTSTRUCT ってのを LPARAM に渡してる』
「この LPTVINSERTSTRUCT の中に、追加するアイテムの情報全部を入れて渡
せば、追加できるわけです」
『 MFC 使ったときの、親アイテムとかもこの中に入れるの？』
「そう、この中に全部入れてから渡します。で、実は MFC でもこの 
LPTVINSERTSTRUCT を使ってアイテムを追加できます」
『ホントだ、 CTreeCtrl::InsertItem() のオーバーロードしたのの中にそ
れ引数に取るのがある』
「というわけで、このメンバ関数を使ってアイテムを追加するのを目標にし
ます」
『それができれば MFC 使わないで追加できるんだもんね』
「そゆこと。ま、これは結構難しいんで、少しずつ進めていきます」
『難しいの？』
「思いの外ね。でも、 MFC 使わないでこういうことするときの基本が全部
詰まってるから、ちゃんとマスターしてもらいます」
『う』
「じゃ、ひとつひとつ進めていくからね。まず、ツリービューコントロール
のひとつひとつの〈アイテム〉について」
『 CTreeCtrl::InsertItem() で追加したアイテムね』
「アイテムひとつひとつは HTREEITEM ってハンドルで識別します」
『 CTreeCtrl::InsertItem() の戻り値ね。ん？　一度追加したののハンド
ルって取れる？』
「 CTreeCtrl::GetNextItem() で取れるよ」
『選択されてるのとか、親子とか兄弟とか……あー、さっきの上下のは兄弟
なのね』
「一応例見ておこうか」

BOOL CMfcDialogDlg::OnInitDialog()
{
// 略。
    // TODO: 特別な初期化を行う時はこの場所に追加してください。
    HTREEITEM hParentItem
        = m_cMainTree.InsertItem( "親アイテム" );
    HTREEITEM hChildItem
        = m_cMainTree.InsertItem( "子アイテム", hParentItem );
    HTREEITEM hHitItem
        = m_cMainTree.GetNextItem( hParentItem, TVGN_CHILD );
    TRACE( "%X, %X\n", hChildItem, hHitItem );
    // 同じ値。

    return TRUE;
}

『親アイテムの下に子アイテムを追加して、 
CTreeCtrl::GetNextItem() で、第１引数に親アイテムのハンドルを渡し
て、第２引数に TVGN_CHILD を渡すと、子アイテムのハンドルが返ってくる
と』
「これは子アイテムの取得法だけど、第２引数を色々変えれば」
『いろんなアイテムが取れるわけね』
「で、これで取得できるのはあくまでハンドル」
『どゆこと？』
「たとえばウィンドウハンドルでウィンドウのタイトルを取得するには」
『 GetWindowText() だよね』
「つまり、ハンドルはあくまでハンドル。そのアイテムの情報を取得するに
は」
『ハンドルを渡して関数よばなきゃいけないわけね』
「そゆこと。ツリービューコントロールは CTreeCtrl::GetItem() で取得し
ます」
『 CTreeCtrl::GetItemData() は違うの？』
「それは一部のデータを取得するだけ。そのデータも普通使わないし」
『 CTreeCtrl::GetItemText() って便利そうなのがあるよ？』
「それは MFC だけ。ここでは MFC を使わずに、 TVM_GETITEM メッセージ
と同じ方法で取得できる CTreeCtrl::GetItem() を使います」
『よーするにめんどーってことね』
「まーそれはね。コード見たらもっと嫌になると思うよ」

BOOL CMfcDialogDlg::OnInitDialog()
{
// 略。
    // TODO: 特別な初期化を行う時はこの場所に追加してください。
    HTREEITEM hParentItem
        = m_cMainTree.InsertItem( "アイテム" );

    // TVITEM 構造体の初期化。
    char pchText[256];
    TVITEM stTvItem;
    stTvItem.mask = TVIF_TEXT;    // 文字列だけ取得。
    stTvItem.hItem = hParentItem;    // 取得したいアイテム。
    stTvItem.pszText = pchText;    // 文字列を受け取る配列。
    stTvItem.cchTextMax = 255;    // そのサイズ。

    // 実際に受け取ります。
    m_cMainTree.GetItem( &stTvItem );
    TRACE( "%s\n", pchText );
    // アイテム

    return TRUE;
}

『ななな、なんか複雑……』
「まず最初のアイテム追加は分かるよね」
『そりゃまーね。次に文字配列作ってるね』
「今回の例では追加したアイテムの名前を取得するんだけど、その文字列を
入れる文字配列をここで用意します」
『次に TVITEM っての用意してるね。構造体？』
「そう、この構造体が一番難しいところ。ちょっと CTreeCtrl::GetItem() 
のリファレンス見てくれる？」
『ほい。 TVITEM 構造体へのポインタを取るんだね、引数に』
「他には？」
『ないよ、引数はひとつ。……あれ？　じゃあハンドルは？　HTREEITEM は
渡さなくていいの？』
「その指定は TVITEM 、つまり引数の中に入れて渡します」
『あーなるほど』
「戻り値は？」
『 BOOL 、だから成功したか失敗したか、だね。あれ？　じゃあそのアイテ
ムの情報ってどう受け取るの？』
「そう、そこがポイント。実は引数の TVITEM で受け取ります」
『……えーっと、整理すると、どのアイテムのを取るのかってのを引数で指
定して、その情報が同じ引数に帰ってくるっていうこと？』
「そゆこと」
『……それって、なんかヤなんだけど……』
「残念ながらそういう仕様なんだよね。これは TVM_GETITEM もそう」
『仕様なら仕方ないよね……えーっと、 TVITEM 構造体の変数に色々入れて
おくのね。 TVITEM::mask ってどういうの？』
「これは〈どのメンバ変数に値を入れてもらうか〉を指定するフラグ。 
TVITEM のリファレンスを見てもらうと分かるけど、多くのデータを取れる
ようになってます」
『 state とか stateMask とかいろいろあるね』
「でもいつも全部返すと大変だから、必要なのはどれってことを 
TVITEM::mask で指定するわけ」
『今回は文字列だけだから TVIF_TEXT ね。いくつも必要なときはどうする
の？』
「 | 使って」
『あ、ビットフラグね』
「ビットフラグは Version 4.05 ( No.055 ) 参照」
『次の TVITEM::hItem でさっき追加したハンドルを渡してる、ってことは
ここでさっき言ってた〈取るハンドル〉を指定するわけね』
『 TVITEM::pszText はさっきの文字配列へのポインタ渡してるね』
「ウィンドウズはこのポインタを通してアイテムの名前を配列に書き込んで
くれます」
『 TVITEM::cchTextMax は……文字列のサイズ？』
「そう、受け取る文字配列のサイズ。 -1 してあるのははみ出ないよう念の
ため」
『で、最後に CTreeCtrl::GetItem() でデータを取得するわけね』
「そゆこと。と、ちょっと急いじゃったから次回に続く！」

/*
    Preview Next Story!
*/
『急いだから続く、ってよく考えるとすごいよね』
「とにかく、火美ちゃんにはしっかりと理解してもらいたいから」
『ねー、今のあたしって世間的にはどのくらいの腕？』
「……」
『ななな、なに？　黙っちゃって』
「……理解してるのとプログラムが書けるのは別だからなぁ……」
『げ！　じゃああたしってそんなに？？』
「実践的な技術はそれほどかも……」
『というわけで次回』
＜ Version 8.13 構造体の使い方 ＞
「につづく！」
『でも、理解しないでプログラムが書けるよりはいいんじゃない？』
「……いいの？」
『うん、いーや』


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

