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

    KAB-studio.h


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

    送信日： 2001/08/20(Mon) No.121
    配信数： 3740 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                      来週はお休みします                        */

　来週、８月２７日分の配信はお休みします。
　一応夏休みということで。僕は旅行に行くし、年２回休むと年間発行数が
ちょうど５０回になるんで(爆)。


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

・Java で納得オブジェクト指向プログラミング更新
　Java で納得オブジェクト指向プログラミングに、これからの配信予定を
含めた詳しい情報を追加します。第１号配信の前にプレ配信をする予定、し
かも日時未定（爆）。というわけで今のうちに購読登録しましょう！
[ Java で納得オブジェクト指向プログラミング]
http://www.kab-studio.com/Programing/JavaOOP/


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

2001/08/12 (Sun)
　ちょっとアレなマンガ描いたり Java メルマガ描いたり。テレビは爆笑オ
ンエアバトルスペシャルが素晴らしすぎ！　素が見られるっていいね。

2001/08/13 (Mon)
　この日もお休み。でもずーっと Java メルマガ。甲斐あって完成、スケ
ジュール調整、そのメルマガを自分で購読登録、広告配信、そしてアカウン
ト来る。そしたらまた送るものが。まぐまぐもがんばってるとゆーか。あと
マンガ描いたり眠かったりうるさかったり購読登録数の野望を語ったり。

2001/08/14 (Tue)
　仕事はライブラリ作成。マイブームはテンプレートの専化。帰ってからは
マンガっぽいの。「敵に負けても味方に負けるな」。お盆休みはヒット数あ
まり減らないねぇ。

2001/08/15 (Wed)
　仕事は引き続きライブラリ。「テンプレートの専化」は「テンプレートの
明示的特殊化」の方が近いらしい。 \ と / の違いをどうするかなー。お昼
にソルパックの方とお話。実は格闘技できます。帰ってからはのんびり。そ
して名前。あなたは自分の名前、好きですか？　わては……。

2001/08/16 (Thu)
　仕事は SMTP クライアント。送る側って作りやすい？　Shift JIS -> JIS
変換はよくわからず。 Base64 の方が分かりやすいです。帰ってからは自作
小説読んで無駄に時間を潰す。電話代。ホームページコンテンツを効率よく
売る方法……かも。あずまんが大王映画。あー今日は細かいの多いな。謎の
プロジェクト KTTB 。そして一番容量食ってるコンテンツは？

2001/08/17 (Fri)
　でもこの日の日記書いたのは次の日朝。お仕事は文字コード変換。謎のコ
ンストラクタを後から呼ぶ方法とそのサンプルコード。気持ち悪い……。飲
み会行ってゲームして、ビデオ録れ逃す(泣)。悔しくて悲しくて〜。

2001/08/18 (Sat)
　飲み会の後で疲れてるはずなのに散歩。猫、猫、猫。高層マンションにあ
こがれたり、ＰＳ２欲しかったり。帰ってからは何もせず。 ASL ……。
「キッチン」ネタ。そして ADSL 。やっぱ116かねぇ。


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

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

「新学期早々、大変な目に遭いましたね」
　その、三十代前半に見えるスーツを着た青年は、そう切り出した。
「ええ、全くですよホント」
「なんでも、とんでもなく大きな狼が現れた――」
「あの――」
「――とかいうデマが流れたほどだそうで」
「――そうなんですよ、本当に困ったもんです」
　中年肥りを隠そうともしない校長は、しどろもどろにそう継ないだ。
「警察の方々もがんばっているんでしょうけど、早く真相を究明してもらい
たいものですよ」
「噂は流れる、校舎は建て直さなければならない」
「生徒も浮き足立ってしまうでしょうから……本当は、ゴールデンウィーク
に入る前に何とかしたかったんですけど……」
「確かに」
　その青年は、見かけよりも静かな応え方をした。
　外では重機の音が止むことなく続いている。生徒がいない今だからこそ、
大がかりな工事を行うことができる。
「噂――」
「はい？」
「――好きな人もいれば、嫌いな人もいる」
「あまり好きなのは歓迎できないのですが……今回のことは、とてもありが
たく思っています」
　校長は、隣に立つ、ロボットのような顔をした男の方を見た。男は手に持
つアタッシュケースをテーブルに置く。
　そのアタッシュケースが開くのを、青年はいやらしいほどの笑顔で制止し
た。
「我々はそれをいただきに来たわけではありません」
「はは」
「冗談でもパフォーマンスでもありません」
「は……」
　校長の笑みが消えた。金を求めない相手は、苦手だ。
「では、なんのために……」
　不安を隠そうともせず、校長はおどおどと青年を見た。幾分角張ったその
顔は野性味を感じさせ、欲望たぎる働き盛りを感じさせるのに十分だった。
整えられた髪、自信にあふれる顔、こういった青年が年輩の男性に好感を与
えることは少ない。
　急に青年が立ち上がったことも、恐怖を与えただけだった。
「校舎を――」
「はい？」
「見せてもらいたいのですが」
「は、でも今は工事中ですので……」
　そして唐突に座る。深々とソファーに座り、足を組み、そして言った。
「では、工事が終わるまで、そう――」
　何度目かの沈黙に、校長は話を継がなかった。
「お昼休みになるまで、ここで待つことにしましょう」
　校長は一瞬黙った後、二度うなずいた。だが、「はい」という言葉だけは
出てこなかった。
「あなたも、くつろいで下さい。今は暇なんです……今はね」
　青年は、窓から見える空を見上げた。夏を感じさせる晴れきった空だっ
た。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『なんか自然だったから気付かなかったけど、 Java ってなに？』
「分かりやすく言うとプログラミング言語のひとつ」
『プログラミング言語って C++ がそうだよね。どう違うの？』
「まぁ…… Java の方が簡単だね」
『……どのくらい？』
「 C++ の３倍は簡単。もしかしたら１０倍は簡単かも」
『１０倍！？　なんで！？』
「たとえば VC だと API と MFC 、それにポインタとかのハード、それが」
『 Java だと勉強しなくていい？』
「 Java は OS とかに依存しないから、 API だけ憶えればいいんだよね」
『だから３分の１ね〜』
「ま、僕はあまり使わないから火美ちゃんには教えられないけど」
『う”、先手取られた……』
「ま、そういうわけで〈教える〉のには向いてるんだよね」
『オブジェクト指向プログラミングってのも？』
「特に、かもね。これは C++ よりも１００倍勉強しやすいかも」
『ひゃ、１００倍！？』
「 C++ はオブジェクト指向に邪魔なものが多くてねー」
『そーゆーもんなんだ』
「経験や得意分野にこだわらずに言語を選ぶ、正しい選択かも」
『水希ちゃんも見習わなきゃね』
「でもまずは C++ をしっかりマスターしなきゃねー」
『はぁい……』
http://www.kab-studio.com/Programing/JavaOOP/
_______________________________________________________________[KCM]


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

　Version 7.01
描画してみよう！

『祝、バージョン７！』
「祝って……何が？」
『なんでも。で、バージョン７はなにすんの？』
「バージョン７では、総合的なことを教えていこうと思ってます」
『つまり応用ってこと？』
「そゆこと。やることは今までの知識でだいたいできる、でも実際にプログ
ラムを組んでみると難しい、みたいな部分について教えていこうと思ってま
す」
『おお、やっとそこまで！？』
「ってゆーか、普通はこういうのを先に勉強したりするんだろうけどね、本
を読んだりしてって場合には」
『確かに本とか読むとそうかも。でもマイペースでいいよねー』
「いいのかなぁ」
『あんたがゆーな！』
「まーまー。このバージョンでは、まずダイアログに絵を描いてみます」
『おお！』
「その〈絵を描く〉ってことにすんごくいろんなことが詰まってるから、ま
ずはその辺をしっかりと」
『ほい』
「そのあとタイマーっていうのを使って、ここでメッセージについて教えま
す」
『メッセージって前にやったよね』
「簡単にだけどね。今回はもうちょっと詳しく。で、アニメーションさせて
みたいんでダブルバッファってものについても教えます」
『ダブルバッファ？　バッファって文字列受け取るの？』
「ううん、それとは違うの。この辺は結構上級者向けかもね」
『へー』
「今回はそういう感じに進めていこうと思ってます。目標、２６回！」
『絶対無理』
「あうー。さて、まずはプロジェクトの作成から。いつもの MFC 使ったダ
イアログクラスを作って」
『ほい。Ver 5.01 ( No.066 ) のと同じ方法でいいんだよね。プロジェクト
名は……今、アニメーションさせるって言ってたよね？』
「うん、最終的にはそこまでやってみたいかな」
『じゃー Anime プロジェクトで。いつものダイアログエディタだ』
「じゃあまず真ん中の〈TODO:〉を削除して、ボタンをひとつ追加して。こ
れを押したら描くようにしたいから」
『じゃ、【描く！(&D)】で IDC_B_DRAW でいい？』
「そんなとこだね。さらに、【ピクチャー】を貼り付けてダイアログいっぱ
いくらいに広げて」
『ピクチャー？』
「ボタンとかエディットボックスとかのある【コントロール】ツールボック
スの、最初から２番目、つまり矢印の右側」
『あー、謎のサボテン砂漠ね』
「サボテン砂漠、確かにそう見える……」
『これのプロパティは……ん？　 ID が IDD_ANIME_DIALOG ？』
「それはダイアログのプロパティ。今の状態のピクチャーだと〈枠〉だけだ
から、枠の部分で右クリックしてプロパティ選んで」
『ほい。今度は大丈夫そう……あれ？　 IDC_STATIC って前に見たような』
「そう。 Ver 3.12 ( No.037 ) でやった、普通の文字列をダイアログに貼
り付ける【スタティック】と同じ」
『さっきの〈TODO:〉のだね』
「このピクチャーはそれに近いの。普通のスタティックは文字列を表示する
けど、ピクチャーはアイコンやビットマップを表示するのに使います」
『ってことは、これにアイコン貼れるの？』
「貼れるよ。このプロパティで【タイプ】を【アイコン】にして【イメー
ジ】を IDR_MAINFRAME にして」
『ほい。お、いつもの MFC のへんてこなアイコンが出た！』
「もしダイアログにちょっとアイコンを貼り付けたいっていう時には」
『こうすればいいわけね』
「で、今回はアイコンを貼り付けるわけじゃないから。まず【 ID 】は
IDC_S_CANVAS にして、【タイプ】は【四角形】、【色】は【白】にして」
『ほいほいほい。……あれ？　いつのまにか小さくなってる』
「【タイプ】を【アイコン】にしちゃったからね。もう一度ダイアログいっ
ぱいに広げておいて」
『ほい』
「ダイアログの方はこれで完成。今度はプログラムの方。まずクラスウィ
ザードで IDC_S_CANVAS に変数を関連づけます」
『【表示】−【ClassWizard】で【メンバ変数】のページで IDC_S_CANVAS 
をダブルクリック』
「【カテゴリ】を【コントロール】、【変数のタイプ】を【 CStatic 】に
して」
『へー、 CStatic なんてクラスがあるんだ。変数名は？』
「まー適当に…… m_cCanvasStatic にでもしといて」
『ほい。次は？』
「次は【描く！】ボタンを押したら呼ばれる関数作って」
『ほい。【描く！】ボタンを右クリックして【イベント】、んでそのまま
【追加と編集】っと。CAnimeDlg::OnBDraw() ができたよ』
「それじゃ、その中にこういうコードを書き込んで」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    ::SetPixel( hDC, 10, 10, dwColor );
}

『うわぁ、知らないのばっかし……』
「これまで一度も使ってないのばかりかも」
『まーいーや。ビルドして実行、【描く！】ボタンを押す……何か起きた？』
「 IDC_S_CANVAS の左上をよーく見てみて」
『……あ、赤い点が』
「こうすれば、 IDC_S_CANVAS の ( 10, 10 ) に点を描くことができます」
『地味……。 ( 10, 10 ) って、左側が横軸で右側が縦軸？』
「そうだよ。たとえば」

    ::SetPixel( hDC, 50, 50, dwColor );

『右下にずれた』
「最初のふたつの引数が、四角形の左上の点の、 X 座標と Y 座標、つまり
横軸と縦軸ね。その次のふたつの引数は四角形の右下の点の X 座標と Y 座
標」
『最後のは？　ってゆーか１行目でなんか謎なことしてるんだけど』
「これだね」

    COLORREF dwColor = RGB( 255, 0, 0 );

「まず、ウィンドウズで色を表す時には COLORREF 型を使います」
『だから FillSolidRect() でもそれを受け取ってるのね』
「ちなみに COLORREF は DWORD 型から typedef されてるからここでは dw 
を変数の頭に付けてます。はい問題、 DWORD ってなんでしょ」
『４バイトの符号なし整数でしょ、 Ver 5.16 ( No.081 ) でやったね』
「そうです。で、その４バイトの中になんとかして色を入れなきゃいけな
い、そのために使うのが RGB() ってマクロです」
『これマクロなんだ』
「そ。さて、こっからはちょっとプログラムの話からそれて、色の話に入り
ます」
『色？』
「そう、色。〈光の三原色〉と〈色の三原色〉って知ってる？」
『丸の中に色が描いてあるヤツでしょ。光の三原色は赤青緑で、全部足すと
白になるの。色の三原色は赤青黄色で、全部足すと黒になるの』
「そんなとこかな。で、まず光の三原色から。光の色は、赤・青・緑を割合
を変えつつ足し合わせることで、どんな光の色も作ることができます」
『それが三原色って意味ね』
「そゆこと。全部足し合わせれば白になります。それに、どれもない、つま
り光がなければ当然真っ黒、闇になります」
『……なんかバカにされてるような気がするんだけど』
「でもこの辺って結構あいまいだと思うよ？」
『そう言われるとねぇ……』
「で、ディスプレイで色を出す時にはこの光の三原色を使います」
『色の三原色じゃないのね』
「そう。ディスプレイは中から〈光のビーム〉を出してて、それが見てる人
の目に入る仕組みだから」
『色の三原色は？』
「色の三原色は、光が何かに当たってはね返った色のこと。今回はディスプ
レイのことだけだから、色の三原色の話はパスね」
『あ、逃げた』
「逃げたわけじゃ……」
『で、それがどうつながってくるの？』
「あ、えーっと、もう一度これ見て」

    COLORREF dwColor = RGB( 255, 0, 0 );

「光の三原色の赤・緑・青を英語で書くと」
『 Red 、 Green 、Blue  ね』
「その頭文字で」
『 RGB ！　そういう意味だったんだ』
「で、 RGB() マクロの引数もその R G B と同じ。今、真っ赤になったのは
R 、つまり第１引数が 255 だから」
『ってことは第２引数が 255 、つまり』

    COLORREF dwColor = RGB( 0, 255, 0 );

『お、緑色になった！』
「もちろん第３引数は青色だから」
『 255 以上は？』
「ないよ。引数は引数なし１バイト整数だから」
『ってことは 0 から 255 ってことね』
「で、各色の割合を微妙に変えれば、どんな色も表現できるから」
『どんな色も？　金色も？』
「いや、〈金色〉って色はないから」
『絵の具にあるじゃん』
「いや、あれは違うから……まーいーや。そういう無理なの以外の色は作れ
るから。さて問題、赤・緑・青が 0 から 255 、ってことは、実際の色の種
類っていくつ？」
『どゆこと？』
「えーっと……赤と、緑と、青、それぞれ少しずつ割合変えればいろんな色
ができるでしょ。そうやって作れる色の数は？　ってこと」
『えーっと、赤は 0 から 255 まで変えられて、緑もそうでしょ、ってこと
は赤が 0 のとき緑も 0 から 255 種類あって、赤が 1 のときも……だか
ら、 255 とおりが 255 とおりあるんだから』
「違うっ！　２進数のときやったでしょ、 0 から 255 なら」
『あ、 256 とおり！　ちょっとボケただけよ。で、かけて 65536 とおりだ
ね』
「で、青も加えると？」
『それが 256 通りあるから…… 16777216 だって。かなり多いね』
「そう。で、これがよく言われてる〈フルカラー〉のこと」
『これが〈フル〉なんだ。もっと上はないの？』
「これ以上色数が増えても、人間の目には比べられないんだよね」
『なさけな』
「はいはい。で、ここで COLORREF のリファレンス見てみて」
『ダブルクリックして F1 っと。げ、英語！』
「 COLORREF も RGB() も API のだからねぇ、これはしょうがないかな。
で、この中にこういうふうに書いてあるでしょ」

0x00bbggrr 

「これが、 RGB() マクロを作った後の COLORREF 変数の中身」
『 bb が青、 gg がグリーン、 rr が赤だよね』
「そう、つまり RGB() マクロは各引数を１６進数２桁ずつに変換して、こ
ういうふうに各バイトに置くんです。１バイトの変数は char 。 unsigned
cher の範囲は？」
『 0 から 255 、だから RGB() の引数もそうなんだ』
「 DWORD の４バイトのうち、１バイト目は使わないで、２バイト目は青、
３バイト目に緑、４バイト目に赤が入るわけ。ちなみに２バイト目から４バ
イト目の３バイト、ビットで表すと？」
『１バイトは８ビットだから２４ビットだね』
「よくフルカラーのことを〈２４ビットカラー〉っていうのはこれが理由」
『【画面のプロパティ】のはそうだね』
「で、重要なとこ。別に色を表すのに、こういうふうに１変数に詰め込む必
要なんか、ホントはないわけ」
『クラスのメンバ変数に入れたり、ってこと？』
「そゆこと。でも API の仕様がこうなってる、からそれに従わなきゃいけ
ない。今回から教えてくのは、そういう〈 API のルール〉を知ってくこと
だから」
『なんかめんどそ』

/*
    Preview Next Story!
*/
「実際面倒かもね」
『そなの？』
「そう、なんでやねん！」
『！？』
「って仕様が多々あるんだよねー」
『ビックリした……』
「というわけで次回」
＜ Version 7.02 デバイスコンテキスト ＞
『につづく！』
「ま、愚痴りながら憶えると早いかも」
『変な勉強法……』


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




