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

    KAB-studio.h


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

    送信日： 2001/12/17(Mon) No.137
    配信数： 3770 ( 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/nikki2/

2001/12/09 (Sun)
　何もしてないのに眠い……。バックアップが CD-R に入りきらない。 
DVD-R 買うか？　テレビはラブラブっぷりが熱いだぁ！だぁ！だぁ！がいい
感じ。

2001/12/10 (Mon)
　無茶苦茶疲れてる……。まぁ残業後に横浜行ってきたし(爆)。
Samsonite by Stark ってバッグがいいんだけどやや高い。ロボコン高専部
門予選、見たいけど見られない〜。そしてリブレット。迷いまくり。

2001/12/11 (Tue)
　疲れた……ちゃんと寝てるのになー。お仕事はインタビューのための資料
作りが大半。ちょっと GGX Plus 。ディズィー ED3 は苦労しただけあって
なかなかいい感じ。北条時宗最終回はいい感じでした。ビジネス社会を時代
劇で表現したのは成功かなーと。そしてサムソナイト。丈夫なのかー。買う
か？

2001/12/12 (Wed)
　仕事は資料作り。ワードやエクセルが使いにくい(泣)。最近岩田さんがい
い役多いかも。ワークシェアリング万歳！(爆)　机の中……そのくらい自分
で整理しなさい……。そしてターガスというバッグ。でも欲しいのはノート
パソコン用じゃないのー。

2001/12/13 (Thu)
　疲れたけど仕事は順調。ベースシステムがしっかりしてきたから。 DLL 
のロードと解放でメモリにアクセスできなくなる？　なんか天使のしっぽに
はまりつつある……。ビデオデッキ、標準でダビングするとトラッキングが
あまり狂わないなぁ。そしてスラッシュドットとシグネイチャー。シグネイ
チャーはちゃんと届いてますよー。

2001/12/14 (Fri)
　また徹ゲー。今回はウィニングイレブンがメイン。今日はぷらとわ＆まっ
たりの予定。お仕事は本番環境での不具合で時間が……。そしてスラッシュ
ドットとシグネイチャー２。ブラウザって何がいいんでしょ。

2001/12/15 (Sat)
　今日はまったり。ソフトウェア開発も、人月じゃない方法で料金を計算で
きないものかなー。レセプトみたく。アニメはココロ図書館がいい感じ。サ
ントラ買うかも。あとリブレットは買わずに他の物を買おうかと。バッグは
無印良品の……。


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

■　第二章　青年ふたり　−１７−

　恭子は、伏せていた目を少しずつ開けた。まず視界に入ったのは俊雄の背
中と信吾の顔だった。少し顔を上げて遠くを見ると、そこにはつい先ほどま
であった木々がごっそりと削り取られて、すぐ側で地面が終わっている光景
があった。
　少し記憶を呼び戻す。確かあの化け物が飛び掛かってきて、木村君が護っ
てくれて、そのときすごい音がして、地面が揺れて……。
　恭子は俊雄の脇からひょいと覗いた。その先には、仰向けになって倒れて
いる化け物がいた。それは、全く動いていなかった。上を見上げれば、自分
自身信じられないといった表情をした俊雄が、左足を前に出した格好のまま
硬直していた。
「木村君が……？」
「なんか……蹴ったら……当たった……」
　俊雄は恭子の方を向いて笑ったが、顔は引きつっていた。
「みんな！」
　公園の崩れた方を見れば、その切り立った崖から身軽そうに舞は飛び出し
てきた。三人の所まで来たときには、息も上がっていた。
「だ、大丈夫？」
「うん、木村君が……」
「なんとか、やっつけられたみたい」
「え？」
　舞は、急に崩れた公園の盛り土のことを言ったつもりが、ふたりの指さす
先を見て、わけが分からなくなった。
「……どういうこと！？」
　崖崩れに飲み込まれた男を肩に抱えて、これまた軽々と崖を登ってきた雅
樹を舞は睨み付けた。
「何って、穂香が銃を持った男がいるっていうから……」
　その言葉を舞は反すうする。そうだった、あの三人と対峙して、そのとき
雅樹が――。
「だ、だからって木村君ほっぽいていいってことは、ないわよ……」
「そうよ、あたし達すごく怖かったんだから！　ホントすごく！」
　恭子が舞を強烈にフォローするが、舞自信はなにもそこまでと思ってい
た。一応、助けてくれたわけだし……。
「そうだよ！　俺達のことほったらかしにして何考えてんだよ！」
　今まで放心状態だった信吾も、水を得た魚のように口を盛んに動かしてい
た。
「って、俺はおまえ達護るなんて言ってねーぞ」
　雅樹の声色が変わった。
「おまえ達が着いてくるのは勝手だ。自分の身くらい自分で護れ。俺は舞を
護れればそれでいいんだ」
「あたしだけ……ってそれはないんじゃない？　じゃぁ、木村君のことなん
かどうでもいいっていうの！？」
「ああそうさ、俺はあんたの母さんから舞を護れって言われたんだ。おまえ
以外の命なんざどうだっていいんだよ！」
　バチィイン！
　思いっきり顔をはたいてから、雅樹って意外と背が高いんだな、そう思っ
た舞だった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『２週に１度の Java メルマガ！』
「１９日は〈第８回  中身がない抽象メソッド〉です」
『……なんかタイトルだけだとぜんっぜん分かんないんだけど』
「この辺になると高度だからねー」
『あ、そういえば、今から１回目を見るってことってできるの？』
「バックナンバーのこと？　できる……らしいよ」
『なーにそのあいまいな言い方』
「それがね、下のリンクにあるように、メールを送れば買えるらしいよ」
『メール！　めんどくさー』
「確かにね。何か簡単なシステムを提供してくれるといいんだけど」
『でもとにかく、今前のが欲しいって人はこれですぐ買えるんだ』
「そゆこと。６回目だけ欲しいって人とかにもいいかも」
http://premium.mag2.com/p/p_faq.html#faq701
_______________________________________________________________[KCM]


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


　Version 7.17
オーナードローでカッコヨク！

「今回はちょっと面白いことをしてみましょう」
『面白いこと？』
「っていうか、ホントはデバイスコンテキスト自体結構面白いものなんだけ
どね。画面に描画できるわけだから」
『アプリに好きなよーに絵が描けるわけだもんね』
「今回教える【オーナードロー】は、デバイスコンテキストが使いたくなる
ような仕組みのひとつ。ダイアログに IDC_B_DRAW ボタンがあるでしょ」
『うんある。【描く！】って書いたの』
「これを【描く！】じゃなく、ちょっと派手にすることができるんです」
『それがオーナードローってヤツなんだ』
「または【オーナー描画】って言うのだけど、ここではオーナードローで統
一するね」
『オーナー描画って、漢字が分からない文字だけひらがなにしてるみたいで
なんか変……』
「オーナードローの、オーナーは【持ち主】、ドローは【描く】」
『ビルのオーナーとか言うもんね』
「そのビルに当たるのが、ダイアログ」
『ボタンを持ってるのはダイアログ、ってことね。ってことは、そのダイア
ログがボタンを描く？』
「そゆこと。普通はボタンが自分自身を描くんだけど、そうじゃなくてボタ
ンの持ち主のダイアログがボタンを描く、それがオーナードロー」
『……なんか難しそうなんだけど……』
「でもかなり簡単。特にボタンはね。とりあえずやってみようか。まずはク
ラスウィザードを開いて。メニューの【表示】から【 ClassWizard 】を選
んで」
『ダイアログ出たよ』
「【メッセージマップ】のページを開いて、【クラス名】は CAnimeDlg 、
【オブジェクト ID 】も CAnimeDlg にして」
『ほいほいほい』
「メッセージの中から WM_DRAWITEM を選んで、右上の【関数の追加】を押
してから【コード編集】を押すと」
『 CAnimeDlg::OnBDraw() の下にメンバ関数ができた』

void CAnimeDlg::OnDrawItem
    (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

「まずはこのメンバ関数が呼ばれるかどうか確認しましょう」

void CAnimeDlg::OnDrawItem
    (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    TRACE( "Hit!\n" );
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

『んじゃビルドして実行』
「……」
『…… Hit! って出ないよ？』
「うん出ないよ」
『なんですとー！？』
「オーナードローは持ち主が描くわけだけど、そのためには描かれるもの、
つまりボタンの方から〈描いていいよ〉って許可しないといけないんです」
『あー、勝手に描けないんだ』
「そこで、ボタンの方で許可するようにします。ダイアログを閉じてから、
ダイアログエディタを開いて IDC_B_DRAW のプロパティを開いて」
『右クリックからプロパティっと』
「プロパティの【スタイル】ページに」
『【オーナー描画】がある！　これオンにすればいいんだよね』
「そうそう。それでビルドして実行してみて」
『ほい。 Hit! って出た！　げ、でもボタンが消えた！』
「消えたんじゃなくて、【描く！】とか、立体的に見せる縁とかも描かれな
くなっただけ。 CAnimeDlg::OnBDraw() に TRACE() でも置いて」
『この辺にボタンあるかなーってとこで押すと、ちゃんと TRACE() のが出
てくるね。見えてないだけなんだ』
「というわけで、見えるようにしましょう。そのためのメンバ関数が
CAnimeDlg::OnDrawItem() 。このメンバ関数は、 WM_DRAWITEM ってメッ
セージが送られてきた時に呼ばれるメンバ関数……」
『……』
「……つまり、ボタンが押された時に CAnimeDlg::OnBDraw() が呼ばれるよ
うに、ボタンの描画が必要な時に呼ばれるメンバ関数」
『描画が必要な時っていうと、 CAnimeDlg::OnPaint() みたいな感じ？』
「ほとんど同じ。ただタイミングとか違う部分も多いけどね。そうそう、 
CAnimeDlg::OnPaint() に前に追加したのは消しちゃっていいから」
『続き物って感じで教えないね』
「プログラムは小さく小さく、が重要だからね。と、それは置いといて、実
際にボタンを描画してみましょう。まずボタンの ID が第１引数の nIDCtl 
に入ってるからそれを確認」
『ボタンの ID ってことは、 IDC_B_DRAW だね。でもこれって何のため？』
「いくつもボタンをオーナードローにしちゃったら」
『そっか、それぞれ別の描画しなきゃいけないから』
「そのためのチェックね。で、ボタンのデバイスコンテキストが第１引数の
lpDrawItemStruct の hDC メンバ変数に入ってます」
『 LPDRAWITEMSTRUCT って初見』
「頭の LP は？」
『ポインタの印だね。それ取ると、 DRAWITEMSTRUCT 』
「これが構造体になってて、オーナードローに必要な情報が全部入ってるか
ら、これを使って描画すればオーケー」
『 BeginPaint() とか GetDC() とか』
「の準備や後片付けは必要ないから。このメンバ関数が呼ばれる前に準備さ
れてるってことかな」
『便利ねー』
「それではやってみましょう」

void CAnimeDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    // ここから追加。
    if( nIDCtl == IDC_B_DRAW )
    {
        HBRUSH hBrush;
        hBrush = ::CreateSolidBrush( RGB( 0, 0, 255 ) );
        ::FillRect
            ( lpDrawItemStruct->hDC
            , &( lpDrawItemStruct->rcItem )
            , hBrush 
            );
        ::DeleteObject( hBrush );
    }
    // 追加ここまで。
    
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

『 nIDCtl がそのボタンの ID か調べて、そうならボタンを塗り潰し？』
「 DRAWITEMSTRUCT::hDC にボタンのデバイスコンテキストが入ってて、
DRAWITEMSTRUCT::rcItem はボタンの四角が入ってる RECT 構造体だから」
『あとはいつもの塗りつぶしね。 FillRect() の第２引数が分かりにくいけ
ど……』
「前も言ったけど、これは lpDrawItemStruct-> の部分は無視するのがコ
ツ。だから &rcItem と同じ」
『 Ver 6.02 ( No.102 ) の話ね。んじゃビルドして実行。を！　ボタンが
真っ青！』
「こういうふうに青く塗りつぶせるわけです。これは無味簡素だけど」
『がんばれば好きなようなボタンが描けるわけねー。なんかすごい』
「ま、実際にはここからの方が大変かもね」
『でもさ、ボタンの枠まで消えちゃうってちょっとビックリかも。だって、
これじゃボタン押したのわからないじゃない』
「そうじゃなくて、ボタン押した時にはボタン押した時の描画をしなきゃい
けないわけ。ボタンはそうだったわけだから」
『ボタンを押したらへこむのは、ボタンがへこんだように見えるように描い
てた！』
「そういうこと。だからオーナードローのときも」
『へこんだらへこんだように見せなきゃいけない！　って、そんなことでき
るの？』
「もちろん。 DRAWITEMSTRUCT のリファレンスを読むと」
『色々パラメーターがあるんだね』
「押されたかどうかは itemState メンバ変数を調べればわかります。この
中の ODS_SELECTED ってビットフラグが立ってたら〈押されてる〉状態。
ビットフラグ調べる方法って憶えてる？」
『う”』
「 == の代わりに & で比較すればいいから。 Ver 4.05 ( No.055 ) を参考
にね」
『普段使わないと忘れちゃうね……』
「というわけで使ってみましょう」

void CAnimeDlg::OnDrawItem
    (int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
    // ここから追加。
    if( nIDCtl == IDC_B_DRAW )
    {
        HBRUSH hBrush;
        if( lpDrawItemStruct->itemState & ODS_SELECTED )
        {
            hBrush = ::CreateSolidBrush( RGB( 255, 0, 0 ) );
        }
        else
        {
            hBrush = ::CreateSolidBrush( RGB( 0, 0, 255 ) );
        }

        ::FillRect
            ( lpDrawItemStruct->hDC
            , &( lpDrawItemStruct->rcItem )
            , hBrush 
            );
        ::DeleteObject( hBrush );
    }
    // 追加ここまで。
    
    CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}

『んー長いけど、さっきの DRAWITEMSTRUCT::itemState に ODS_SELECTED 
が入ってるか調べてそれで……ブラシの色を変えてる！』
「 ODS_SELECTED が含まれてる、つまりボタンが押されてる時は赤色、それ
以外は青色」
『んじゃ実行。おお！！　ボタン押すと赤くなる！』
「こうなるとボタンらしくなるでしょ」
『なるなる！　っつーかこれなんかカッコイイ！』
「だねー。で、最後に重要なこと」
『……またミスとか？』
「違います。ここで重要なのは、こういうオーナードロー的なことを、普段
のボタンもしてるってこと」
『うん、それはさっき聞いた』
「そして、ボタンもウィンドウの一種。つまり、ウィンドウを作って、
CAnimeDlg::OnPaint() や CAnimeDlg::OnDrawItem() が呼ばれたときにボタ
ンらしく描画すれば」
『ボタンになる？　ってことは、あたしがボタン作れる！？』
「将来的には作れるようになってもらうし、ウィンドウズのボタンだって所
詮は」
『げ、出た。つまりフツーのプログラマーが作ったもんだって言いたいんで
しょ？』
「そゆこと。こういう、元々存在するシステムのものっていうのはすごいも
のに見えるけど、でもそうじゃないんだってことは忘れないでね」
『はいはいはい、耳にたこができますよーだ』

/*
    Preview Next Story!
*/
『何かすると呼ばれるって多いよね』
「うん、そうしないと CPU が休めないから」
『げ、これって CPU が楽をするためのシステム！？　ダメくさい！』
「それがね、 CPU が暇じゃないと全部のアプリを見て回れないんだよね」
『なになに、じゃぁ暇っていうのはいいことなの？』
「必要不可欠。というわけで次回」
＜ Version 7.18 タイマーで止めない！ ＞
『につづく！』
「暇は重要だよ」
『えー、暇ってなんかヤダ！』
「若いねー」
『水希ちゃんじじくさ！』


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

引き続き更新なしの予定。
　やっぱり忙しいっす！　でも Java で納得オブジェクト指向プログラミン
グでちょっと更新があるかも？
[ Java で納得オブジェクト指向プログラミング]
http://www.kab-studio.com/Programing/JavaOOP/


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

