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

    KAB-studio.h


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

    送信日： 2001/10/29(Mon) No.130
    配信数： 3780 ( 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 が 130 号になるんで縮刷版を更新します。特に #pragma 
twice を grep するのに最適。だから購読登録してる人もダウンロードしま
しょう。ダウンロードはダウンロードルームにて
[ ダウンロードルーム ]
http://www.kab-studio.com/Freeware/index.html#MailMagazine

・リンク集にリンクを追加。
　リンクにリンクを追加します。追加するのは俺の王国 In Japan。データ
ベースや CD-ROM の操作など、いろんな Tips が揃ってます〜。
[ リンク ]
http://www.kab-studio.com/Info/Link/


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

2001/10/21 (Sun)
　情報処理試験！　楽勝と思いきや突然のハプニング！　その窮地を救って
くれたのは…… Java ？　んで帰りに PS2 買ってきました。んで DOA2 し
まくり。なんだかなぁ。

2001/10/22 (Mon)
　仕事はプログラミングせず、資料作り。罪悪感。 DOA2 やりすぎ注意、な
本日のイラスト。そしてエレナとホールド対策。

2001/10/23 (Tue)
　ちょっと風邪気味。お仕事はミーティングして突貫工事で資料作成、午後
は客先へ。帰りにラーメン食べたりとちょっと出費が……。電気敷毛布、ポ
イント高し。

2001/10/24 (Wed)
　お仕事は昨日のまとめ。最近ちょっと、文章力落ちたかも……。午後は
ミーティング。なんだかどんどん大変なことに……。なんかＸとヒカルの碁
がちょっと……特に後者……。

2001/10/25 (Thu)
　午前はのんびり、午後は飛び入りで忙しくなったり。オラクルって便利だ
けど高い……。帰りにぶらっと横浜へ。欲しい DVD があるんでねぇ。お給
は残業休出でそれなりに増。今月は出費多いからそれをカバー。そしてホッ
トハーブと Java 。やっぱ今時代はフラッシュですか？

2001/10/26 (Fri)
　徹ゲーして次の日に日記を＜いつものこと。お仕事はプログラム解析。ク
ラス化すれば楽そうだけどできなさそう。そして帰り際に急な仕事が、って
これうちの仕事違う〜。飲みいってから DOA2 大会。ゲンフー強し。そして
リサイズ終了を知るには？　WM_EXITSIZEMOVE ってメッセージがあるみた
い。

2001/10/27 (Sat)
　コインランドリー往復食材フリクリ昼寝カレー実家ウタダ北海道 DOA2 か
ぶヘッダー夜寝ロズウェルと謎に大忙し。フリクリは絵と音楽いいけど。コ
コロ図書館は細かいとこがポイント。実は今日 C 型肝炎の検査してくる予
定だったんだが……。そして WM_EXITSIZEMOVE 。メッセージとか API とか
多いねぇ。


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

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

「！」
　おハルさんは顔を上げ、少年は何かを感じた。
「止めてくれ」
　左の命令で車は脇に止められ、少年は、何かを読みとろうとしていた。左
は黙ったままそれを見守る。
「意外と近くです。多分車両に積んでいます。この前のとは、だいぶ感じが
違います」
「ＬＷシリーズじゃないのか？」
「判りません。ただ、この前ほどの力を感じないことは確かです」
「……リシュネを出してみるか」
　少年は驚き、内ポケットから取り出した携帯をあわてて止めた。
「彼女はまだ早すぎます！　テストならディルトを先にすれば！」
「ほんっとーに、そう思うのか？」
　左にじっと見つめられて、少年は、少ししゅんとなる。
「……ディルトは、今回のような市街地での戦闘には向きません……です
が、リシュネはまだ安定期に入っていません。僕とは違うんですから」
「ＡＰ化はリシュネが先だ」
「そりゃそうでしょう、彼女はセカンドバージョンなのですから！　僕は、
彼女を実戦に投入することにも反対です」
「それじゃぁなんのために作ったんだか分からないな」
「だったら……っ」
　少年は、言えば言うほどいらついてきた。自分自信、この意見が不毛なこ
とを知っていた。自分達の存在理由、なぜ今自分がここにいるのか――完全
な自由など、得られるはずもないのに。
「ま、いっか」
　そう言って、少年へと笑んだ。
「え……」
「ＬＷじゃないとすれば、危険は伴う。それに、全く違う存在かもしれな
い。それに……あの二人の力もちゃんと確かめておきたいしね」
　少年はぱぁっと顔を明るくした。
「じゃぁ、僕が行ってきます！　あの二人にも死なれては困りますものね」
「ああ、もちろんだ……ま、そんなに急ぐ必要もないだろ？　だったら車で
行こう」
「……左さんも、行くんですか？」
　少年は運転手に道順を教えて、車は走り出した。普通、自分から「戦場」
へと行きたいと思う指揮官はいない。しかも、別段そういうことに長けてい
るとも思えない。この男に関しては、少年にも解らないことが多すぎた。
　この男は何者なのだろう。誰に訊いても知る者はいなかった。データを検
索しても載ってはいなかった。自分から語ることもない。知り合いもいな
い、いるとしたらこの「おハルさん」だけだ。
　なんだかんだ言ってもこの人に頭が上がらないのは、何かを感じているか
らかもしれない。とはいえ、それは実際に感じられるものでないから、信じ
るに値しないはずなのに……。
「そうだ！」
　いきなり左はそう言って、少年へと笑みを向けた。
「俺は、どうしてもリシュネの状態が見たい。そこでだ、リシュネを君がサ
ポートするのと言うのはどうかな？」
「逆ならいいです」
「逆というと？」
「リシュネがサポートです」
「うーん、ま、いっか。って言っても、とりあえず本人が納得すればだけど
な」
　なぜこの男は「命令」しないのだろうか。必ず話し、相談し、そして決め
る。僕が反対すればその決断をあっさりと覆す。それは、僕に恐怖している
からか？　否、そう、感じる……。
　左は携帯を取りだし、楽しそうに番号を選んでいた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「リージョンは英語で region 、〈領域〉って意味。デバイス……」
『あ、水希ちゃん、今教わってるのって第何回？』
「えっと、　Ver 7.11 ( No.131 ) だね」
『って、なんかそれってギリギリ過ぎない！？』
「そういえばそうだね。ここ最近何かと忙しかったみたいだから」
『ここ数週間の土日って、なんか潰れてるもんね』
「でも徹夜でゲームとかは自業自得って気も……」
『……そんなんでぷらとわ休止とかないよね……』
「それはないでしょ。仕事よりホームページの方が大事みたいだから」
『まー、このメルマガからぷらとわなくなったら何も残らないしね』
「って、ヒトゴトみたいに」
『はっ、そしたらあたしの出番が全然ない！？　イヤーっ！』
「火美ちゃんはまだいい方だと思うんだけどね……忘れ去られた人も……」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 7.10
いろんな描画モード

「前回、前々回と C++ の方中心だったけど、今回はデバイスコンテキスト
の話に戻ります」
『難しい？　簡単？』
「簡単な方だと思うよ。まずこれ」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );

    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );
    // 右下に 10 ずらしてもう一度描きます。
    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );

    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『ん？　前に似たのやったよね』
「ブラシを用意して楕円描くっていうの。今回はペンは特に重要じゃないか
ら使ってないけどね」
『あ、 CreateHatchBrush() 使ってる。編み目のだよね』
「そう、これは〈編み目ブラシ〉を作るためのもの。第１引数で HS_CROSS 
を渡してるから、これは縦横の編み目」
『リファレンス見ると斜めなんかもあるみたいだね。でもそれだけ……』
「ま、こういうのはちょっとした作図用だからね。で、この楕円を、ひとつ
めの１０ドット右下にもうひとつ描いてます」
『楕円ふたつ重ねて描いてるわけね。でもこれが？』
「試してみて」
『ほい実行。うん、ふたつ楕円が重なってるね。……あれ？　でもさ、編み
目の隙間って下が透けて見えないんだね』
「そう、そこがポイント。実は、今は〈背景モード〉が〈透けて見えない
モード〉になってるんです」
『ってことは透けて見えるモードにもなる？』
「そゆこと。それを変える API が SetBkMode() 」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );

    // ここで背景モード変更。
    ::SetBkMode( hCanvasDC, TRANSPARENT );

    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );
    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );
    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『お、下が透ける！』
 transparent は英語で〈透明〉って意味。ちなみにデフォルトの塗り潰し
モードにする時は OPAQUE 。 opaque は不透明って意味」
『オ』
「ボケ不可」
『うっ。あれ……？　でもこれ、よく見るとなんか変』
「どの辺が？」
『んー……あ、縞模様が透けてない！　っつーか下のと一緒に並んでるみた
い』
「そうなんだよねー。これはデバイスコンテキストの仕様で、描画場所を変
えても、ブラシの模様はずれないんだよね。だから」

    ::Ellipse( hCanvasDC, 13, 13, 83, 53 );

「ってふたつめの楕円をちょっとだけずらしても」
『編み目がずれない……』
「ま、やっぱりちゃんとした模様を描くなら、こういうの使わない方がい
いってことかも」
『ふーん。あ、あともうひとつ質問。 OPAQUE は透明じゃないんだよね。
ってことは編み目の隙間の色ってどうなってるの？　ペンとブラシ以外で指
定するの？』
「そう、これはまた別に SetBkColor() って API で指定します」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );

    // ここで背景色変更。
    ::SetBkColor( hCanvasDC, RGB( 255, 0, 0 ) );

    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );
    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );
    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『うわ、編み目の隙間が真っ赤！』
「この SetBkColor() は〈背景色〉を変えるもの。単純に楕円だけでも、ペ
ンとブラシとこの背景色の３色を決める必要があるってことかな」
『もしくは透明か、ね』
「そゆこと」
『……んでもさ、 API の名前、なんか混乱しそう』
「ん？　どういうこと？」
『だってさ、 SetBkColor() なんて言ったら、普通、キャンバスそのものの
色を変えるって思わない？』
「それはそうかも。 SetBkMode() もキャンバスそのものを透明にしそうだ
よね」
『そうそう。でも、この〈背景〉って、ようするにこれから塗る楕円とかそ
ういうのの背景、ってわけなのね』
「そういうことだね。この辺も、デバイスコンテキストのクセかも」
『こういうの、ひとつひとつ憶えていかなきゃいけないわけね……』
「じゃ、さらに憶えてもらいましょう」
『げげ』
「というわけで、今度は【ラスタオペレーション】ってゆーの」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );
    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );

    // ここでラスタオペレーションを設定します。
    ::SetROP2( hCanvasDC, R2_BLACK );

    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );
    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『げ、ふたつめの楕円が真っ黒！』
「 SetROP2() の第２引数で R2_BLACK を渡すと、何色のペンやブラシを
持っていても真っ黒になっちゃうんです」
『げげ。で、そのラスタオペレーションってなんなの？』
「英語で書くと raster operation 。 raster は〈画面の格子〉って意味。
縦横にドットが並んでるものそのものって事かな」
『つまりドット絵ってことね……』
「 operation は操作。つまりラスタオペレーションは〈ピクセルの操作〉
って意味」
『たいそうな名前の割りには……』
「略して ROP 。で、この ROP には簡単なのから複雑なのまであるんだけ
ど、ここで使ってるのは一番簡単な ROP2 ってグループ」
『簡単だから、真っ黒だけ？』
「いや、そういうわけじゃないけど、でもシンプルなのが多いよ。真っ白に
塗り潰す R2_WHITE とか、あとデフォルトの普通に塗り潰す R2_COPYPEN と
か」
『 SetROP2() 見ると他にも結構あるけど、はっきり言って意味分かんな
いの多いかも。どういうのなの？　たとえば R2_NOT とか。否定？？』
「 R2_NOT は、背景色を〈逆の色〉にするもの。たとえば白は黒、青は黄
色」
『白は黒、は分かるけど、青は黄色って……そうなの？』
「逆の色っていうのは、 RGB 各色で、 0 は 255 、 100 は 155 みたく、
256 の真ん中で逆転させた色って事。青は RGB( 0, 0, 255 ) で、黄色は
RGB( 255, 255, 0 ) 」
『そういうもんなのね』
「ま、こういうのはどっちかっていうと美術の話かも。他には……」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );

    ::SetBkColor( hCanvasDC, RGB( 0, 255, 0 ) );
    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );

    ::SetROP2( hCanvasDC, R2_MASKPEN );
    ::SetBkColor( hCanvasDC, RGB( 255, 0, 255 ) );

    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );
    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『重なってるとこが黒く！』
「 R2_MASKPEN は、色を塗り重ねてさらに濃くします。逆に R2_MERGEPEN 
は、塗り重ねるとさらに薄くします」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    HBRUSH hBrush = CreateHatchBrush( HS_CROSS, RGB( 0, 0, 255 ) );
    HBRUSH hOldBrush = (HBRUSH)::SelectObject( hCanvasDC, hBrush );

    ::SetBkColor( hCanvasDC, RGB( 0, 0, 0 ) );
    ::Ellipse( hCanvasDC, 10, 10, 80, 50 );

    ::SetROP2( hCanvasDC, R2_MERGEPEN );
    ::SetBkColor( hCanvasDC, RGB( 0, 0, 255 ) );

    ::Ellipse( hCanvasDC, 20, 20, 90, 60 );
    ::SelectObject( hCanvasDC, hOldBrush );
    ::DeleteObject( hBrush );
}

『ホントだ、黒が薄くなった』
「あと R2_XORPEN かな」
『試すとなんか R2_NOT に似てる……けどちょっと違うね』
「簡単に言うと、 R2_XORPEN は、塗る色と背景の色が離れてれば白に近づ
いて薄くなって、逆に色が近いと黒に近づいて濃くなります」
『ややこしい……』
「ま、これはあんまり使わないでしょ。で、あとはこれらの組み合わせ」
『って簡単に言うけど、はっきり言ってよく分かんないよ？』
「ってゆーか実際にはあまり使わないと思うよ。ちゃんとした CG ソフトは
GetPixel() で色拾って合成して SetPixel() する、みたいなことしてると
思うし」
『むしろその方が分かりやすそう……』
「デバイスコンテキストの機能って色々あるけど、こういった複雑な機能を
憶えるよりは、基本的なことの応用の方がいいかもね」

/*
    Preview Next Story!
*/
『ってゆーか、もしかしてデバイスコンテキストって使いにくくない？』
「それは言えるかも。ペンの付け替えとか大変だよね」
『今回の ROP も複雑だし』
「でも、そういう細かいとこを自分でやるか任せるかっていうのは」
『難しいとこよねー。だって、 CG の勉強もしなきゃいけないでしょ？』
「そういうことになるね」
『というわけで次回』
＜ Version 7.11 クリッピングではみ出さない！ ＞
「につづく！」
『どうしても左向いてる顔って描けないのよねー』
「いや、そういう勉強は必要ないから」


////////////////////////////////////////////////////////////////////
/*              ２００１年１１月５日（月）の更新予定              */
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
*/
////////////////////////////////////////////////////////////////////
