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

    KAB-studio.h


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

    送信日： 2002/05/06(Mon) No.156
    配信数： 3800 ( 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/

2002/04/28 (Sun)
　昨日のうちにかぶヘッダー。今日は表紙壁紙。ぱぱっと横浜そごうへ。新
しくできた紀伊國屋書店はちょっと小さい？　色々本購入。おねてぃドラマ
CD いい感じ〜。テレビはＮスペの小さな詩人がインパクト大きかった。
ホットハーブ第１章完結。１年掛けてだったけど、結構成長した？

2002/04/29 (Mon)
　５月表紙壁紙完成！　巫女さん姿です。描き方はいつも通り。ホットハー
ブよりかなり時間掛かる……。後ろの火美ちゃんのアップは苦肉の策だった
り。昨日の夜中はウイイレ。ボール持ってからが重要？　他に部屋の整理と
か。ホットハーブはやっぱ人気あるなぁ。

2002/04/30 (Tue)
　昨日に引き続き部屋の整理。昨日のうちに CD-R へのバックアップと印
刷。午後は秘密の理由で Windows98 をインストール。でもかなり大変……
i810 チップセットを認識してくれなくて。夜にウイイレ対戦。コーナー
キックの防ぎ方知りたい……。あずまんが大王との違い。

2002/05/01 (Wed)
　Kanon にマジ泣き。３６時間眠らずにはまる。真琴シナリオがあまりにも
琴線に触れまくり……。経験上仕方ないんだけど。これからあゆシナリオ
を。それ以外何もしてない〜。

2002/05/02 (Thu)
　実家へ。お昼頃に出て立川で待ち合わせ。中華美味しかった。切手を売っ
たりしてから実家へ。実家ではまったり。んで昨日、あゆシナリオクリアし
ました。また泣きました〜。全体的に見ても、色々難点はあるけど忘れられ
ない作品になりそう。

2002/05/03 (Fri)
　家族で御茶ノ水周辺散策へ。神社とか、東大とか、お墓とか。猫がいっぱ
い〜。<BR>

2002/05/04 (Sat)
　午前中は実家でのんびり。お昼過ぎに出て夕方に家に到着。それからもの
んびり。なんか疲れてる……。一人暮らしを始めてから１年。でも結構問題
なくできてるかも？


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

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

「ったく〜、なんでふったりなんかしたのよ〜」
　頭を抱えて苦しむ恭子を前に、舞は苦笑いをするしかなかった。
　校庭を見下ろせば、グランドを駆ける俊雄をすぐ見つけることができる。
ひときわ高い背と、たなびくことのない短い髪が俊雄を目立たせていた。
　別に、舞にだけ判る印があるわけではなかった。
「別にふりたくてふったわけじゃないんだけどねー。成り行きだもの……」
　舞たちの高校は、明日から期末試験一週間前。中間試験の時には美術部の
中で勉強会を開いていたのだが、今回はサッカー部に入り浸って美術部には
顔も出さないでいた。
「木村君、勉強教えるのうまいんだよね」
「でもさ、どっちにしろ木村君はサッカー部戻ってたんだから」
「じゃぁ、明日から勉強教えてくれるかな」
「はは……」
　放課後の誰もいない教室で、恭子と舞は語っていた。教科書だけは開いて
いたが、勉強は遅々として進まなかった。
「信吾は図書室行っちゃったし。なんかさー、やる気わかないよね」
「ほんと、こんなはずじゃ……」
　舞の右手が、教科書を握りしめた。
「こんなはずじゃ、ないのに……」
「木村君ふっちゃったこと？」
「ちがうって」
「……なんか訊き辛かったんだけどさ、舞は、あの人のどこがいいわけ？」
　舞は天井を見上げた。跳ね上がる前髪が、空へと向いた。
「同類……かな」
「同類？」
「そう。なにか、近いもの、感じられるかな。今まで、そういう知り合い、
いなかったし」
「え、そうなの？　だって、その泉って四つあるんでしょ？」
「全然交流なんてないもの。母さんは雅樹のこと、なんで知ってたのか
なぁ。私は、他の泉がどこにあるかさえも知らないのに」
「そんなもんなんだ……」
　恭子は、軽く聞き流しながらも、次の質問をした。
「でもさ、勇者ってその四つの泉からひとりずつ選ばれるんでしょ？」
「よく憶えてるね……」
「なんとなく、ね」
「でもさ、その勇者って言うのも、思いっきり現実味ないんだよね。あの子
供達とか、そういうのとは全然関係なさそうだし」
「あの犬とか猿とか、そういうのってなんか、敵、っぽくない？　っていう
より、怪物って言うか、モンスターってゆーか」
「そんなのどっから出てくるの。だいたい……」
　舞は澄み渡った空を見上げた。
「あの雰囲気じゃ、怪物を操ってるヤツがいる。てことは、結局人と戦わな
くちゃいけないってことだもの」
「そう言えばそうね。なんかそういうのってグログロしてて嫌だね」
「……人は、あんまり殺したくないな」
「……ふうん」
　恭子は、その「あんまり」という言葉に、雅樹との、舞の言う＜共通点＞
らしきものを感じたような気がした。

                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「……」
『どったの？』
「ううん、特に CM するようなことなくって……」
『あるじゃない！　５月表紙壁紙はあたしが巫女さんします！！』
「なんか刀持ってるね」
『ほら、あたしってかわいいの似合わないから』
「そうかなぁ」
『あら、しおらしーことを言っちゃって』
「べ、別にそういうわけじゃないんだけどね……」
『それにほら、ホットハーブも第１章終わったみたいだし』
「 Java メルマガの CM が多かったから、その辺してなかったかも」
『ま、いわゆるお金が絡むと〜ってヤツよね？』
「もうすぐ終わるから」
『そしたらホームページの CM 多くなる？』
「というより、そうしないと CM することがなくなる……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 8.14
構造体を読み解く

「さて、今回は前回使った」

typedef struct tagTVINSERTSTRUCT {
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
#if (_WIN32_IE >= 0x0400)
    union
    {
        TVITEMEX itemex;
        TVITEM item;
    } DUMMYUNIONNAME;
#else
    TVITEM item;
#endif
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

「を読み解きます」
『かなり複雑……』
「それは、いろんなものが複雑に絡み合ってるから。しかも、それぞれが独
立してるものだから」
『順に憶えていけば大丈夫？』
「大丈夫。じゃ、まずは外側、構造体全体の話から」

typedef struct tagTVINSERTSTRUCT {
// 略
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

『これでくくってあるってことは、この頭のと最後のとが関係してるってこ
と？』
「そういうこと。えっと、 typedef は教えたよね」
『 Version 5.08 ( No.073 ) でね』
「ここでは」

typedef struct tagTVINSERTSTRUCT {
// 略
} TVINSERTSTRUCT;

「と」

typedef struct tagTVINSERTSTRUCT {
// 略
} FAR *LPTVINSERTSTRUCT;

「が組み合わさってるって考えて」
『 , でふたつ一緒に型を作れるのね』
「で、まずは上の」

typedef struct tagTVINSERTSTRUCT {
// 略
} TVINSERTSTRUCT;

「から。これは」

struct tagTVINSERTSTRUCT {
// 略
};

「って構造体の別名として TVINSERTSTRUCT の付けてる……」
『付けてる？』
「みたいな感じ」
『何それ』
「前回の CTreeCtrl::InsertItem() で試してみると分かるけど、 
tagTVINSERTSTRUCT そのものは型になってません」
『へ？　型として使えないの？』
「そう、だからただの名前、何にも使えない名前」
『いみなー』
「だから実際には」

typedef struct tagTVINSERTSTRUCT {
// 略
} TVINSERTSTRUCT;

「は、この構造体を TVINSERTSTRUCT って名前で使う、って意味だと考えて
ください」
『……質問！』
「はい火美ちゃん」
『前に、構造体はクラスと同じだって教えてもらったよね』
「 Version 7.07 ( No.127 ) でね」
『ってことは』

struct TVINSERTSTRUCT {
// 略
};

『でいいんじゃないの？』
「今はね」
『あ、昔は違ったって話？』
「そゆこと。クラスがない、 C 言語の時代にはこの書き方では構造体は作
れなかったんです」
『だから typedef 使ってた？』
「そゆこと。そういう書き方しか前はできなくて、それが今も API には
残ってるってこと」
『じゃあ、昔の typedef 使ったのは今の書き方に読み替えちゃっていい
の？』
「うん、それで大丈夫だと思うよ。じゃ、その次の」

typedef struct tagTVINSERTSTRUCT {
// 略
} FAR *LPTVINSERTSTRUCT;

『んーと、 FAR * ってのが増えたんだね』
「 FAR は Version 6.03 ( No.103 ) の far が #define されたもので、こ
こで書いてあるとおり空白になります」
『ってことは * だけ、ってことはポインタ？』
「そう。 typedef は最後の単語だけが新しい型の名前って指定されるか
ら、ここでは〈構造体のポインタ〉として LPTVINSERTSTRUCT って型が作ら
れてることになります」
『これって』

typedef TVINSERTSTRUCT *LPTVINSERTSTRUCT;

『でもいいんだよね』
「もちろん。一緒に型を定義するのは昔の C 流ってとこかな。逆に言え
ば、ここでも」
『さっきみたいにこう読み替えちゃえばいいのね』
「そゆこと。さて、次に構造体の中身」

    HTREEITEM hParent;
    HTREEITEM hInsertAfter;

『はただのメンバ変数だよね。次の』

#if (_WIN32_IE >= 0x0400)

『はプリプロセッサだね #if は Version 6.06 ( No.106 ) でやったけど、 
_WIN32_IE はなに？』
「これは組み込みマクロのひとつ」
『 Version 6.07 ( No.107 ) でやったね。 WIN32 ってどういう意味？』
「 WIN32 は３２ビットウィンドウズっ意味だけど、まぁ〈最近のウィンド
ウズ〉って読み替えていいかな。 Version 2.14 ( No.025 ) 参照」
『今日は参照多いね…… IE って、インターネットエクスプローラー？』
「そう。つまりこの組み込みマクロは、 IE のバージョンを示してるんで
す」
『 IE のバージョンなんて関係あるの？』
「あるんです。実はツリービューコントロールってウィンドウズ９５が出た
頃よりもバージョンアップしてて、そのバージョンアップって IE と一緒に
されてるから」
『ってことは IE4 が入ってるか入ってないかでツリービューコントロール
のできることが違う？』
「そう、だからバージョンを調べて構造体の中身を変えてるんです」
『これだと、 IE のバージョンが低いと』

typedef struct tagTVINSERTSTRUCT {
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
    TVITEM item;
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

『で、高いと』

typedef struct tagTVINSERTSTRUCT {
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
    union
    {
        TVITEMEX itemex;
        TVITEM item;
    } DUMMYUNIONNAME;
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

『なわけね』
「そゆこと。ここまで分かれば、あとは」
『 union だけ！　これは初めて見るのだね』
「そうだね。これって C 言語の時代からあるんだけど、分かりにくいのと
ちょっと危険なのだからあまり使われてないかな」
『憶えても使わない方がいい？』
「だね。でも使い方だけは教えておくから。まず」

    union
    {
        TVITEMEX itemex;
        TVITEM item;
    } DUMMYUNIONNAME;

「の DUMMYUNIONNAME は無視して」
『ダミーって付いてるものね。さっきの typedef struct 
tagTVINSERTSTRUCT の名前だけってのと同じ？』
「そんなとこ。で、 union の中身について。 union は〈あるメモリ領域を
いろんな変数に見せかける〉ことができます」
『？？？』
「つまり」

typedef struct tagTVINSERTSTRUCT {
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
    TVITEM item;
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

「でもあるし」

typedef struct tagTVINSERTSTRUCT {
    HTREEITEM hParent;
    HTREEITEM hInsertAfter;
    TVITEMEX itemex;
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

「でもあるってこと」
『どっちの変数にもなる？』
「そう。次の例が一番分かりやすいかな」

    TVINSERTSTRUCT stInsertItem;
    TRACE( "%X\n", &( stInsertItem.item ) );
    TRACE( "%X\n", &( stInsertItem.itemex ) );
    // 64F4B8
    // 64F4B8

『お、普通に item と itemex と両方使ってて……アドレスが同じ！』
「そう、ふたつメンバ変数があるように見えるけど、実際には同じメモリ上
に置かれてて、〈どういう型として扱うか〉だけが異なるってこと」
『……それってまずくない？　たとえば、ここで TVITEM item の代わりに
int i とかやっても』
「できちゃいます」
『……それってヤバくない？』
「やばいよ。だからあまり使われてないし、こういう使い方も勧めないか
ら」
『まさに教わるだけってことね』

/*
    Preview Next Story!
*/
『教わるだけのって……やっぱいつか使いたくなるかな』
「絶対なるよ」
『お、経験者は語る？』
「 C++ って、型がコンパイル時にチェックされるでしょ」
『 HWND に int 入れられないものね』
「そのあたりの柔軟性が欲しい時に……」
『 union に手を出しちゃうわけね』
「というわけで次回」
＜ Version 8.15 通知メッセージの受け方 ＞
『につづく！』
「 union は MFC もメッセージ処理に使ってたりするし」
『なら大丈夫なんじゃない？』
「どうかなぁ……」


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

・KAB-studio.h 特別変更
　この日の号だけ、 KAB-studio.h がちょっとだけ縮小します。理由は作者
が旅行するため。縮小した分は次の週に持ち越すのでご安心を。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

