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

    KAB-studio.h


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

    送信日： 2001/09/17(Mon) No.124
    配信数： 3780 ( 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/09/09 (Sun)
　AirH" 改善のためにぷらら入会……大失敗（泣）。まぁ安いからいーか。
あずまんが大王３巻購入。午後から会社。サーバーの準備とテストって不得
意分野なんですけど(汗)。バグ直してとりあえずノルマ達成。そして残業代
は結構高い？

2001/09/10 (Mon)
　なにげに定時上がり。疲れ取らないと。仕事はいきなりの机上デバッグ。
手強い……。ま、忙しくはないからいっか。そして派遣先と個人契約。今の
とこは別として、結構いいかもしんない？

2001/09/11 (Tue)
　台風、役立たず(爆)。バグは「確率的」？　久々客先へ。先が不安だけ
ど、こういうこと自体は楽しいです。なかなかできる体験じゃないし。あ、
飛行機が……。

2001/09/12 (Wed)
　バグ発生を再現。っつーかファイルの作成＆コピーだけでエラー出すか？
NT 貧弱すぎ。これと平行してエクセルデータ作成。 Java メルマガは 20 
に成長。地道にね。

2001/09/13 (Thu)
　今日はエクセルまわりだけ。わてのプログラムにバグが？　公開して他人
にメンテしてもらった方がいいかも。っつーかもっと使い回しとか普通にな
んないのかな。かぶスタ４０万ヒット達成。でもカウンターもう意味ないか
も。

2001/09/14 (Fri)
　エクセルまわりとデバッグ関係。デバッグはエラーの原因らしきもの発
見。っつーか仕様？　そのあと飲み会。知り合いが iWPC に出るんで土曜に
遭ってきましょう。あしたのジョーで格闘家っぷりを。そんな感じで１２時
帰宅。

2001/09/15 (Sat)
　洗濯豚汁掃除がいいね。ぶらっと歩いて買い物。ビデオテープ買ったり、
隣の駅に行ったり。そして西武が首位！　このまま優勝だーっ！


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

■　第二章　青年ふたり　−４−

「おじゃましまーす」
　と四人は上がって、その男一人暮らしの部屋を見て「らしくない」と思っ
た。
　とにかく何もなかった。確かに引っ越してから数週間が経っただけとはい
え、家具は初めから備え付けのものだけ、良くありそうな雑誌の類はなく、
まるで塵ひとつもないようなきれいさだった。
「きれい好きなんですね、朴さんて」
「暇なんでね、掃除くらいしかすることないから。それにお前がきれい好き
だからね」
　一瞬自分に言われたんだと思った恭子は顔を赤らめてぎょっとするが、雅
樹の顔はあさってを向いていた。
「柊さん……のことね」
「仕事はしてないんですか？」
「んなもんかったるくて」
「ぷーたろう」
　舞の小声は雅樹に届いていても無視した。
「働いてないって……」
　さらに奥の方を見に行く舞を除いた三人は、その部屋の数に驚かされる。
考えてみれば、このマンションの外観を見れば、その値段の高さは容易く想
像できた。
「舞さんの家がお金出しているんですか」
「ばっ違うわよ」
　俊雄の疑問をあわてて払拭する舞。
「あのなんでも見る力、それでなーんか悪いことしたみたいよ」
「そうそう、君達俺のこと詮索しにきたわけじゃないんだろ？」
　あ、と今頃気づいたような信吾と恭子がテーブルへと座る。雅樹の煎れた
紅茶がひとりずつに出される。
「否定ぐらいすればいいのに……」
「ん？　何、舞さん」
「ううん、なんでもないの」
「で、用件は？」
　雅樹がどっかと椅子に座り、足を組む。背は高い、足は長い、その体格は
威圧感があった。しかも、服装はラフで、顔つきも少し怖いように見える。
「え、ええと……」
　雅樹という男を正面に捉えて、面と向かわれて問われると、恭子はにわか
にあわて始めた。考えてみればほとんど初対面の相手に自分達の調べ事を頼
むというのはかなりあつかましいことだったし、第一それは副次的な目的で
あったわけで、いざ説明するとなるとしどろもどろするほかないという感じ
で……。
「あんたが来る前の公園の事件と、この前のガッコのこと。二つともマスコ
ミに出なかったって言わなかったっけ？」
「んなこと言ったっけ？　……言ったか」
　脇を見て確認を取る雅樹。
「つまり、それを調べて欲しいのか。確かに黒幕の気配、感じられるな」
「そうですよね、何か匂いますよ」
　信吾が変な敬語を使って口を挟む。
「第一、月が光ったり消えたりするの待つ必要なんかないんじゃねぇか、
とっとと終わらせればこんなとこにじっとしていなくていいしな」
　雅樹は一気に紅茶を飲み干すと、すっと立ち上がって言った。
「んじゃ、ちょっくら出かけてくるわ」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『最近は目立った更新ないねぇ……』
「むしろメルマガの方が中心かも」
『あんま違わなくない？』
「読んでる方はそうかもしれないけど」
『作ってる側は違う？』
「一番の違いは、メルマガはメンテしなくていいってことかな」
『メンテ？　つまり修正とかって事？』
「そう。実際、今の Codian なんかは古いのが結構あって」
『ちょっとヤバイ？』
「もしかして結構ヤバイかも……」
『メルマガはそういうの気にしなくていいんだ』
「後でフォローするくらいかな」
『イラスト関係はメンテ関係ないから増えるわけね』
「これから一層、役割分担が進むかも」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 7.04
GDI とペン

「デバイスコンテキストのクセはいっぱいあるから、どんどん教えてくね」
『そんなにいっぱいあるの？』
「結構ねー。というわけで、今回はまず楕円を描いてみましょう」

void CAnimeDlg::OnBDraw() 
{
    ::Ellipse
        ( ::GetDC( m_cCanvasStatic.GetSafeHwnd() )
        , 10, 10, 80, 50 
        );
}

『これは API 版ね』
「 MFC だとこう」

void CAnimeDlg::OnBDraw() 
{
    CDC *pcDC = m_cCanvasStatic.GetDC();
    pcDC->Ellipse( 10, 10, 80, 50 );
}

『んじゃビルドして実行。左上に楕円ができた』
「 ellipse っていうのはそのまま〈楕円〉って意味。最初ふたつの整数値
が左上の座標、あとふたつの整数値が右下の座標ね」
『 SetPixel() と同じ感じ……あれ？　そういえば色は？　問答無用で黒縁
白円になってるけど』
「そこが今回のポイント。前に、デバイスコンテキストは〈画家〉って言っ
たでしょ」
『うん言った』
「この画家は、絵を描くためのペンとかを初めから持ってるんです」
『つまり楕円はそのペンで描いたってこと？』
「そゆこと。だから、色を変える時にはそのペンを持ち替えてもらう必要が
あるんです。ちょっと長いけどこんな感じ」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HPEN hPen = ::CreatePen( PS_SOLID, 10, RGB( 255, 0, 0 ) );
    HPEN hOldPen = (HPEN)::SelectObject( hCanvasDC, hPen );
    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );
    ::SelectObject( hCanvasDC, hOldPen );
    ::DeleteObject( hPen );
}

『あら長い』
「１行目は分かるね」
『デバイスコンテキストを取ってるだけね』
「２行目はペンを作ってます」
『へー、 HPEN ってハンドルだよね、ってことはペンもウィンドウズのもの
なんだ』
「そう、こういうペンとか、あとブラシとかをウィンドウズシステムとして
用意してあるんです。これを GDI ( Graphics Device Interface ) って言
います」
『じーでぃーあい、ねー』
「 Graphics は絵、 Device は道具、 Interface は接続面とかそういう意
味。まー簡単に言えば、画材道具を使うためのハンドルってことだね」
『ちょっと難しいかも……』
「ま、他の GDI も見てけば少し感覚掴めると思うから」
『で、 CreatePen() でペンを作るわけね、ウィンドウズシステムの中に。
第１引数は？』
「これはペンの種類。あ、第２引数はペンの太さなんだけど」
『あ、そういえば試してなかった。ビルドして実行、楕円の縁が赤い太線に
なった！』
「太いのは第２引数が 10 だから。これを 1 にすると」
『線が細くなった』
「で、第１引数を PS_DASH にすると」
『点線になった！』
「正確には波線だね。点線は PS_DOT の方」
『あ、こっちの方が細かい』
「第３引数は Ver 7.01 ( No.121 ) でやった RGB マクロね」
『これで色を決めるんだね』
「さて、その次」

    HPEN hOldPen = (HPEN)::SelectObject( hCanvasDC, hPen );

『これまたよく分からない……』
「まず、デバイスコンテキストは、ペンだったらひとつのペンしか持てませ
ん」
『どゆこと？』
「デバイスコンテキストって画家は、手に持てるペンはたった一種類ってこ
と。ペンは今みたいにいろんな太さ、いろんな色で作ることができるんだけ
ど、これから楕円を描こうって時に持てるのは」
『ひとつだけってことね』
「そこで、 SelectObject() って API で持つペンを交換します。第１引数
は交換相手のデバイスコンテキスト、第２引数は新たに持たせるペン」
『戻り値は……それまで持ってたペン？』
「そのとおり！　デバイスコンテキストがそれまで持ってたペンがあるか
ら、それを受け取って、取っておきます。これはあとで戻すから」
『めんどいねー』
「うん、この辺は面倒なとこだね。でもこれはデバイスコンテキストを使う
時のルールだから」
『戻り値を HPEN にキャストしてるのはなんで？』
「 SelectObject() は、ペンだけじゃなく他の GDI にも使うから、受け取
る時に HPEN 以外ので受け取ることもあるんで、こういうふうにキャストし
ないといけないようになってるんです」
『でも、戻り値と第２引数って同じ HGDIOBJ だよ。第２引数に渡す時って
キャストしなくていいの？』
「んー、簡単に言えば、 HPEN から HGDIOBJ には = で渡せるけど、その逆
はダメってこと」
『むつかしいね』
「ここ、ちゃんとやっとこうか。まず、はっきり言っちゃうと、ハンドルは
ポインタの一種だから」
『やっぱそうなのねー』
「でも、完全なポインタって考えない方がいい部分もあるからその辺は憶え
といて」
『はーい』
「で、もうひとつ。ポインタには void ポインタっていうのがあります」
『え？　 void って型がないってことじゃなかったっけ？　戻り値ないとき
に void 使うし、この前の ASSERT の時も』
「ま、それとは別って考えた方がいいかな。 void ポインタは、どんなポイ
ンタとしても使える、言ってみれば汎用ポインタ」
『なんでもポインタねー』
「だから、この void ポインタにはどのポインタからも代入できます」

    void *pv = hPen;

『あ、ってことは HGDIOBJ は void ポインタなんだ！』
「そゆこと。で、今度は逆。 void ポインタは〈どのポインタ〉かは分から
ないから、この void ポインタから、普通のポインタに代入できないように
なってるんです」
『つまりこれが SelectObject() の戻り値の話ね』
「そう。もしこれが何もせずにできちゃうと、本当の型と違う型として入れ
ちゃうことになるから」
『でもキャスト間違えちゃったら』
「もちろん意味なし。はっきり言っちゃえば、こういうのはルール違反。
API はケチだから、こういうとこで関数の数を減らそうとしてるんだよね」
『ホントは SelectPen() とかって感じにそれぞれの関数があればいいって
わけね』
「ま、この辺は API を使う場合には仕方ないことだからね。で」

    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );

「で楕円を描いて」

    ::SelectObject( hCanvasDC, hOldPen );

『これはさっきの SelectObject() で、第２引数がさっき SelectObject() 
で受け取った、元々デバイスコンテキストが持ってたペンだね』
「こういうふうに、ペンを使ったら、ペンを元に戻しておくわけ。で、最後
に」

    ::DeleteObject( hPen );

「で作ったペンを削除します」
『作ったら削除しなきゃいけないんだ』
「 CreatePen() でウィンドウズシステムの中にペンを作ると、 
DeleteObject() で削除するか、アプリを終了しない限り、そのペンは消え
ないから」
『あ、でもアプリを終了させると消えるんだ』
「でも、アプリをいつ終了させるかっていうのはユーザーが決めること。も
しかしたら何日も何ヶ月も実行し続けるなんてこともあるから」
『？　それが何か問題？』
「あーそっか……それはまた次回にってことで」
『はいはい』
「最後に MFC 版を見てもらいましょう」

void CAnimeDlg::OnBDraw() 
{
    CDC *pcDC = m_cCanvasStatic.GetDC();
    CPen cPen( PS_DOT, 1, RGB( 255, 0, 0 ) );
    CPen *pcOldPen = pcDC->SelectObject( &cPen );
    pcDC->Ellipse( 10, 10, 80, 50 );
    pcDC->SelectObject( pcOldPen );
}

『１行目はデバイスコンテキスト取得。２行目はペン作ってるんだね。 
CPen ってクラスが用意されてるんだ』
「その CPen クラスを作るときに、 CreatePen() と同じようにペンを作り
ます」
『３行目でデバイスコンテキストが持ってるペンを取り替えるんだね。ポイ
ンタ渡すんだ』
「前回言ったように、ポインタを使わないと自動的に削除されちゃうから
ね。これは関数を渡す時も同じ事」
『この前の逆ってことね』
「戻り値もポインタ。この戻り値が」
『前に持ってたペンね。あ、今度はキャストいらないんだ』
「 SelectObject() が、 GDI の種類分用意されてるから」
『 API みたく手抜きしてないんだね』
「あともほとんど同じ。楕円描いて、古いペンをまた持たせて」
『でも DeleteObject() で削除してないね。あ！　CPen が勝手に削除し
ちゃうんだ！』
「そゆこと。 cPen 変数がなくなるときに DeleteObject() を呼んでくれる
から、自動的に削除されるわけ」
『これは便利な例ねー』
「削除しなくてよかったり、キャストしないでいいって事を考えると、この
辺は MFC 使った方がいいかもね」

/*
    Preview Next Story!
*/
『デバイスコンテキスト、って長いね』
「 DC って略しちゃうのがいいのかも」
『どっかのゲーム機みたい』
「今はもうないけど」
『あ、そういえば近未来って設定あったね……』
「というわけで次回」
＜ Version 7.05 ブラシとリソース ＞
『につづく！』
「っていうか、追い付いちゃいそうだよね……」
『最初に出てきた２人とか、今はいずこ……』
「金菜先輩くらいなら」
『だーめっ！』


////////////////////////////////////////////////////////////////////
/*              ２００１年９月２４日（月）の更新予定              */
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 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////




