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

    KAB-studio.h


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

    送信日： 2001/10/08(Mon) No.127
    配信数： 3760 ( 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/09/30 (Sun)
　朝っぱらからトンコツラーメン。なんか疲れてる……。東尾監督ぅ(泣)。
テレビはカブトガニがポイント高し。そしてＨＤハイブリッドデッキ……高
そう(泣)。

2001/10/01 (Mon)
　月例会議はなんか受けてた。狙ったわけじゃないのにー。仕事はクラス設
計に四苦八苦。「地獄のプロジェクト」再び。今は楽？　今年もあと１クー
ル、イベントも色々あるけどなんとか過ごしましょう。

2001/10/02 (Tue)
　プログラムは少し手がかりが？　昼休みに横浜へ(爆)。ノワールサントラ
を買いに。夕方には客先へ。なんかやばい……。 FFUL はちぐはぐ。フルメ
タルパニックはなかったことに(泣)。プログラミング辞書のヒット数、高い
なー。

2001/10/03 (Wed)
　プログラミングしてたような気がする。 WS_EX_APPWINDOW とか。設計って
難しい……。 Java メルマガの予定が違う〜。新番組、 X とシュガーがかな
りいい感じ。シュガーはなんで深夜枠なんでしょ。情報処理試験の場所が遠
い……。

2001/10/04 (Thu)
　地獄の日々再び？　恐れおののいちゃいますよ。明日、母上が来たり。昨
日深夜からパトレイバー再放送スタート。今見ても、レイバーってもなが新
鮮に感じたり。こういうのまたやらないかなー。

2001/10/05 (Fri)
　母上来る。パソコンこんなに勉強するとは思わなかったなー。お仕事の方
はというと、例のプロジェクトは来週からって事になったんで３連休は確
保。でも来週土日は潰れるかも……。

2001/10/06 (Sat)
　母上帰る。かなり憶えるの早かったなー。そして徹夜でゲーム。なのでこ
の日の日記は７日昼過ぎに書いてたり……。


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

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

　青年は裏門を出て少し経ってから、後ろを振り向いた。そこには、決して
生徒には見せないであろう、校長が無数にお辞儀をする姿があった。
　面白いように、そのはげた頭が明滅した。
　相も変わらず慇懃な笑みを浮かべたまま、青年は深々とお辞儀をし、そし
て、また歩いていった。
　その笑みを崩すくことなく。
　一分も経たない内に、歩道の脇を車が併走し、止まった。校庭の工事の音
を背に受けながら、青年は黒い外車へと乗り込んだ。
　その途中、身をかがめて後部座席に入る時、初老というには少し早い男と
目が合った瞬間さえも笑みを崩さなかったことに、バックミラーでそれを見
ていた運転手は驚きを隠せなかった。
「どうだった」
　そう男がぶっきらぼうに訊いたとき、車は走り出した。
「予想通り、何もありませんでした。ＬＷ−６７はデータ通りの結果を出し
ていました」
「データ通り？　あんな役に立たないものというデータではなかったはずだ
が」
「確かに」
　そう言われても、笑みは崩れない。
「……それで？」
「情報操作はあまり期待通りの結果は出ていないようですね。マスコミを抑
えても、口コミは抑えることはできませんから」
「ＬＷシリーズをぶつけるのは控えた方がいいかもしれんな」
　男はそう言って、ライターに火を点した。
「ですが、泉の力を引き継ぐ者は、消さなければなりません」
　青年は、笑みを崩すことはない。が、あの独特な間を取った話し方は控え
ていた。
「実行部隊を回すだけの権限は私にはないよ」
「スナイパー、一人くらいは回せるでしょう？」
　まるで深呼吸をするかのように、男はゆっくりと煙を吐いた。白いもや
が、車内を埋め尽くした。
「あまり甘く見ない方がいい。それに、我々の相手は彼らだけじゃない」
「目障りな会社……」
　その言葉がとぎれた一瞬をドライバーは見逃さなかった。青年の笑みに隠
されたその表情の奥底に、強い嫌悪感を感じさせるものが確かにあった。
「……ファインダウト社ですか」
　その嫌悪感を男も感じたが、それを笑うことはなかった。
「左洋一、か。あの男がよっぽど嫌いだと見える」
「そう、見えますか？」
「見えるよ」
「なら、よっぽどのものなのでしょうね……」
　そう言葉を切り、ゆっくりと息を吐き、深々と座り、そして、初めて、眉
間にしわを寄せた。
「私の彼に対する怒りも」
「別に人の過去を詮索する趣味はない。だ、が……」
　灰皿へとタバコを押しつけてから、男はぎらりと青年を睨み付けた。
「くれぐれも、支障をきたさないよう、願いたいものだ」
「その点は大丈夫でしょう、なぜなら……」
　そう言った瞬間、再び青年に不敵な笑みが戻った。
「私は、彼を相手にしたときにこそ、本当の力が出せるというものですか
ら」
　だが、眉間に寄ったしわは消えることがなかった。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ねー、情報処理技術者試験ってなに？』
「国家資格のための試験だよ」
『こっかしかく！？　それ持ってないとプログラミングしちゃダメ！？』
「いや、プログラミングは誰でもできるから」
『はー、危うく犯罪者にさせられるとこだったわよ。で、どんなのなの？』
「いろんな種類やレベルがあるけど、プログラマーならまず基本情報技術」
『ふむ』
「あとソフトウェア開発技術者とアプリケーションエンジニアがいいかな」
『それって取るの大変？』
「倍率的にはね。でも……」
『でも？』
「現場の技術とかけ離れた問題が出るから、勉強しても役に立たないけど」
『げ、意味ないじゃん！　なんでみんなそんなの取るの？』
「人事の人はプログラマーじゃないから、スキルが判断できないんだよね」
『げ、そういうもん？』
「火美ちゃんはその澄んだ目を失わないようにね……」
『そんなくすんだ目で言われても……』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 7.07
構造体とクラス

「今回は、前回ごまかしちゃった構造体とクラスの関係について」
『難しいとか面倒とか言ってたよね』
「うん、なんて言うか、ややこしい話になるんだよね。まずずばり言うと、
クラスと構造体はほとんど違いはありません」
『ってことは、構造体をクラスと同じように使えるって事？』
「そゆこと。たとえば AnimeDlg.h の」

class CAnimeDlg : public CDialog
{
// 以下略。

「これを」

struct CAnimeDlg : public CDialog
{

「って変えてビルドしてみて」
『ほいビルド。あ、通った』
「というわけで、構造体はクラスと同じ。違いはたった一点、些細なことだ
からこれはあとでね」
『うんあとで。それより、ならなんで構造体なんてあるの？　それに、この
前構造体は〈メンバ関数のないクラス〉だって言ってたし』
「そう、その辺からが複雑な話になるんだよね。ここで重要なポイントにな
るのは〈歴史〉」
『れきしぃ？』
「そう、歴史。今 VC で使ってる C++ 言語っていうのは、 C 言語っていう
プログラミング言語を拡張したものだって前に言ったっけ」
『ぽろぽろっと』
「で、構造体は C 言語時代からあったもの、クラスは C++ 言語で加わった
もの」
『クラスは新しいものなのね。あれ？　でも構造体とクラスって同じ物なん
でしょ？』
「そこがポイント。 C 言語時代の構造体と、 C++ の構造体は、実は機能が
だいぶ違うんです」
『同じ〈構造体〉なのに？』
「そう。 C++ 言語になったときに、構造体の機能が〈クラスとほとんど同
じ〉になったんです」
『ってことは、 C 言語の構造体は、クラスみたいな機能はない？』
「そゆこと。それが、前に言った〈メンバ関数のないクラス〉なわけ」
『なるほど。構造体は、 C++ になってメンバ関数って機能が加わったわけ
だ』
「実際にはもっともっと多くの機能が加わったんだけど、それはクラスの機
能をまず知らないといけないから」
『また今度？』
「そういうこと。で、もう少し歴史のお勉強」
『続きがある？』
「うん。まず、 API 。ウィンドウズももちろん歴史があって、多くの API 
も同じく昔からあります」
『そりゃ、 API がなけりゃウィンドウズ操作できないんだもんね』
「で、そういう昔には C++ がなかったから」
『 C 言語で作ってた？』
「だから API にはクラスがないでしょ」
『そういえばそうだね、クラスがあるのって MFC の方だもんね』
「そう、 API の不便な部分をクラスの機能で補おうっていうのが MFC の基
本的な趣旨。ちなみに MFC は Microsoft Fundation Class library の略」
『クラスって入ってるね』
「それが売りだったからね。 API はすべて C 言語向けに作られてるから、
構造体も」
『メンバ関数とかないわけだ』
「前回 RECT を見てもらったけど、 typedef とか使ってたでしょ。あれも
古い C 言語形式の書き方」
『不便ねー』
「ちょっと前までは C++ 言語ってそれほどメジャーじゃなかったから
ね。だけど、クラスじゃないと不便なのは違いないわけで、実は MFC に
CRect っていうクラスが用意されてます」
『便利なためにってわけね』

void CAnimeDlg::OnBDraw() 
{
    CRect cRect;
    ::GetWindowRect( GetSafeHwnd(), &cRect );
    TRACE
        ( "%d, %d, %d, %d\n"
        , cRect.left, cRect.top
        , cRect.right, cRect.bottom );
}

『……別に全然便利になってないじゃん』
「これはね。これは前回の RECT 使った時の例と同じ事が CRect でもでき
るってことの確認のために」
『そういえば、まったく同じに使えるんだね』
「そう、それもそのはず、 CRect は RECT から継承してるんです。 
AFXWIN.H の中を見てみると」

（ AFXWIN.H より抜粋）
class CRect : public tagRECT
（抜粋ここまで）

「継承って憶えてる？」
『あるクラスの機能をまるまる使えるクラスを新しく作るんだよね』
「 Ver 3.1 ( No.026 ) でやったね」
『この CRect も tagRECT から継承してるから、 RECT と同じに使えるわけ
ね。おおっと言わなくていいよ、 tagRECT と RECT が同じってことは前回
やったのだよね』
「そうそう、 RECT は tagRECT から typedef されてるからね」
『……だからー、 CRect が RECT と同じに使えることは分かったけど、便
利って部分は？』
「そうだねー、たとえば」

void CAnimeDlg::OnBDraw() 
{
    CRect cRect;
    ::GetWindowRect( GetSafeHwnd(), &cRect );
    TRACE
        ( "%d, %d\n"
        , cRect.Width(), cRect.Height() );
}

「 CRect には CRect::Width() と CRect::Height() ってメンバ関数があっ
て、これを使えば横幅と高さが一発で出るから」
『……でもこれって、 right - left と bottom - top だよね』
「……あんまり便利じゃない？」
『少しだけ便利。あくまで少しだけ』
「じゃあそうだねぇ…… IDC_S_CANVAS の中央を四角く塗り潰してみましょ
う」

void CAnimeDlg::OnBDraw() 
{
    // IDC_S_CANVAS の左上隅と右下隅を取得します。
    CRect cRect;
    ::GetClientRect( m_cCanvasStatic.GetSafeHwnd(), &cRect );
    // サイズを縮小します。
    cRect.DeflateRect
        ( cRect.Width() / 4
        , cRect.Height() / 4 );

    // ブラシとデバイスコンテキストを準備します。
    HBRUSH hBrush = ::CreateSolidBrush( RGB( 0, 0, 255 ) );
    HDC hDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );

    // 四角形に塗り潰します。
    ::FillRect
        ( hDC
        , &cRect
        , hBrush );

    // ブラシを削除します。
    ::DeleteObject( hBrush );
}

『うわ長！』
「……長いってだけで拒絶するのは悪いクセだよ？」
『べ、別に拒絶してるわけじゃないもん。えーっと……あ、よく見ると見た
ことあるのばっかだね』
「もちろん」
『最初の CRect とかのは今回のでしょ」
「これから描画する IDC_S_CANVAS のってことに注意してね。それと 
GetClientRect() ってとこも」
『 GetWindowRect() だとダメ？　 IDC_S_CANVAS ってタイトルバーとかな
いからクライアントとウィンドウって同じじゃないの？』
「同じだけど、 GetWindowRect() だと画面の左上からの座標が入っちゃう
から面倒なんだよね。 GetClientRect() は」
『サイズだけなんだもんね。これに描くんだったら、 GetClientRect() の
方がいいわけだ。次の DeflateRect() ってのが初見だね』
「 CRect::DeflateRect() は、中心方向に縮小するメンバ関数。たとえば」

    cRect.DeflateRect( 10, 10 );

「ってすれば、上から 10 、左から 10 、右から 10 、下から 10 内側に狭
まります。あ、もちろん cRect の中の top とかがね」
『その引数に、 cRect.Width() / 4 ってことは、横幅の４分の１とかね』
「たとえば DeflateRect( 10, 10 ) した場合、左から 10 、右から 10 だ
から、横幅は 20 狭くなるわけ」
『ってことは横幅は、これまでの横幅の４分の１の２倍、つまり横幅の半分
を引いたのになるってことは……あー、結局半分になるわけね』
「そゆこと。そうひとつずつ考えてくとちょっとややこしいね……」
『その次はブラシ作ってデバイスコンテキスト取得してるね。これは
Ver 7.05 ( No.125 ) とかでのだからいいとして、次の FillRect() も初め
て見るの……だけど、これが四角く塗り潰す API ？』
「そう、第１引数のデバイスコンテキストの、第２引数の四角形を、第３引
数のブラシで塗り潰します」
『あれ？　SelectObject() しなくていいの？』
「これはしなくていい API 。こういうのって API によって結構違うんだよ
ね、そういうのもこつこつ憶えていったり、憶えなくても〈色々ある〉って
ことに慣れておいて」
『そのためのデバイスコンテキスト編なんだもんね。んで、最後にブラシを
削除っと』
「うん、これまでの繰り返しがほとんどだから難しくはないと思うけど」
『質問！』
「はい火美ちゃん」
『 CRect は MFC のなんだから、他のも API じゃなくて MFC のを使うべき
なんじゃないんですかー？』
「だね。 FillRect() も CDC のメンバ関数として用意されてるし。でも、
もう API から MFC に乗り換えたり、ってできるでしょ？」
『そりゃ、ほとんど違わないから』
「だったら大丈夫。 API と MFC で違う時は両方とも解説載せるから」
『これは違わないからいいわけね。もひとつ質問』
「はい火美ちゃん」
『……これってホントに CRect の便利なとこ？』
「……さて最後のまとめ」
『うわ逃げやがった』
「もう一度構造体の話に戻るね。今はまだいいけど、最終的には古い C 言
語形式でも構造体を作れないとダメ」
『どゆこと？』
「普通に VC 使う時にはあり得ないけど、場合によっては古い C 言語形式
でプログラムを書かなきゃいけないときもあるから」
『…… VC 使わない時なんてあるの？』
「ってゆーかそういうのもいつか教えるから」
『げ、そなの？　っつーかそれってこの講座の趣旨から外れてない？』
「いろんな開発環境を知ってこそのプロの VC 使い。実際、 VC マスターっ
ていうのは、プログラミングに関しては〈なんでもできる〉って思われるも
の」
『それに応えられなきゃダメってわけねー』
「ま、あくまでまだ先の話だけどね」

/*
    Preview Next Story!
*/
『……なんか、憶えたことは少ないのに、難しく感じるなー』
「範囲を広げたからね」
『範囲？』
「歴史とか、 C 言語と C++ 言語の違いとか」
『そういうのもやんなきゃいけない？』
「 VC じゃね。憶えなくていい言語もあるんだけど」
『たとえば Java とか？』
「というわけで次回」
＜ Version 7.08 コンストラクタで初期化 ＞
『につづく！』
「ま、 VC の道は険しいってことで」
『ゴールが見えないっていうのは辛いのよね……』


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

・ホットハーブ追加！
　謎な４コママンガ三人合体ホットハーブに３話追加します！　いや、２話
かも（汗）。間があいた割りには数が……。でもこれからも鋭意追加してい
きますんでー。
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


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

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




