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

    KAB-studio.h


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

    送信日： 2002/10/07(Mon) No.177
    配信数： 3600 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

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

・毎月恒例、表紙壁紙です。今回は趣出てますよー、秋ですよー、紅葉です
よー。ダウンロードは CG Gallery にて。
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/

・日記をやや修正
　チョー普通な日記の辞書と臨時板を削除します。更新全然してないし、使
われてないだろうし。いきなり削除しても問題なかったよね？


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

2002/09/29 (Sun)
　１０月表紙壁紙完成。今回は塗りつぶしをグラデーションにしてみまし
た。これだけでだいぶ違う。肉まんってあんま好きくない。テレビはパペマ
ペが良かった〜。

2002/09/30 (Mon)
　お仕事はふたつのプロジェクトを平行に。水瀬さんち２巻が売り切れ〜。
マイク購入。明日のディベート用。

2002/10/01 (Tue)
　ディベートはいい感じに。マイクの電源入れ忘れたけど（泣）。戻ってか
らはドキュメント作成。高いけど美味しいカレー。水瀬さんち２巻購入。台
風情報にややブルー。

2002/10/02 (Wed)
　朝からずーっとドキュメント作成。時間があっという間に。帰ってからは
AIR とか。来週は特に買うものないな。火曜の深夜がちょっと重なってて悲
しい。

2002/10/03 (Thu)
　ここ最近体調悪いかも。お仕事はテスト仕様書書き。 Java で正規表現。
帰ってからはほとはーの私服とか。シスプリって人気あるねぇ。描きたい漫
画、それは格闘もの。

2002/10/04 (Fri)
　今日もテスト仕様書書き。間違ってブラックキャットを買っちゃった。来
週、日記の辞書とかを削除します。たいがいの固有名詞は調べればわかる
し。まぁ毎日読んでください。

2002/10/05 (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 9.16
文字列の横幅縦幅

「前回はテキストエディタもどきを作りました」
『あれだけでも結構カッコイイよねー、漢字もちゃんと入るし。プログラム
も簡単だったし』
「簡単だったけど、ちょっといろんなところを修正したから、今回もう一度
まとめるね。まず、再描画をするプログラムの場合、入力するたびにこうい
う手順を踏みます」

１：入力すると入力ハンドラが呼ばれる。
　文字入力なら CSdiTestView::OnChar() 。
２：入力されたデータをメンバ変数に取っておく。
　CSdiTestView::OnChar() の第１引数に入力文字が入ってる。
　それをメンバ変数 m_cMainTextStr に追加する。
３：InvalidateRect() で再描画を指示する。
４：再描画の指示を受けて CSdiTestView::OnDraw() が呼ばれる。
５：メンバ変数からデータを取ってくる。
　m_cMainTextStr にこれまでに追加された文字列が入ってるのでそれを。
６：それを描画する。
　描画先は CSdiTestView::OnDraw() の引数に渡される DC 。

「あ、前回よりもう少し詳しく書いてあるから」
『こういうふうに細かく書くと、結構面倒な感じよねー。でもプログラム的
には量多くなかったよね』
「うん、まず SdiTestView.h の方に」

class CSdiTestView : public CView
{
    // 描画する文字列。
    CString m_cMainTextStr;    // 追加。
// 略。

「って感じにメンバ変数を追加。これが１」
『この中に、入力された文字列ぜーんぶ入ってるわけね』
「次に、キー入力時のハンドラ CSdiTestView::OnChar() で、入力された文
字をこの中に追加します」

void CSdiTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    // メンバ変数に入力した文字を追加。
    m_cMainTextStr += nChar;
    // 再描画を指示。
    InvalidateRect( NULL );

    CView::OnChar(nChar, nRepCnt, nFlags);
}

「これが２と３」
『文字を追加して、んで再描画の指示ね。あれ？　そういえば、前に 
InvalidateRect() を使った時ってこんな簡単だったっけ』
「 Version 7.16 ( No.136 ) の時は API だったけど、これはメンバ関数だ
から。実際に呼んでるのは CWnd::InvalidateRect() 」
『 CWnd のメンバ関数？』
「さっきの SdiTestView.h を見てもらえば分かるけど、 CSdiTestView 
って CView から継承してるでしょ」
『継承って……』
「 Version 2.13 ( No.024 ) 参照」
『あ、継承してるとそのメンバ関数は全部使えるんだよね』
「で、リファレンス見れば分かるけど CView は CWnd から継承してるから」
『 CWnd::InvalidateRect() が使えるわけね。なんかその辺って忘れちゃい
そう』
「これからは重要になるから……まぁそれから憶えてもいいし。それに」
『それに？』
「フレームウィンドウもビューウィンドウもウィンドウなんだから、当然 
CWnd から派生してる、って憶えてもいいし」
『……なんかそれってテキトーじゃない？』
「適当だけど、 MFC はその辺はある程度理屈通ってるから大丈夫だよ」
『確かに理屈は通ってるよね、ウィンドウだから CWnd ……』
「と、話を戻して。再描画の指示を出したら、再描画用のハンドラが呼ばれ
るからそこで再描画します」

void CSdiTestView::OnDraw(CDC* pDC)
{
    CSdiTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // これまでに入力された文字列を出力。
    pDC->TextOut( 0, 0, m_cMainTextStr );
}

「これが５と６になります」
『質問！』
「はい火美ちゃん」
『まず、』

    CSdiTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

『ってなに？』
「これはあと３回くらい後に説明するから、それまではおあずけ」
『別におあずけってほど聞きたいわけじゃないけど。次の質問！　なんか再
描画のたびにちかちかするんだけど』
「あ、たぶんウィンドウを小さくして入力すればあまりしないよ」
『あ、ホントだ』
「大きくするとダメだけど」
『う”、これってじゃあ最大化ってできないじゃん。なんで？』
「これは、再描画って実は結構大変だから。ビューウィンドウを一度全部消
して全部描き直しってすると、結構処理に時間がかかるから、消してから次
のを描くまでに時間がかかって」
『だからちかちかしちゃうのね』
「この辺をちゃんと考える場合には、本当に更新される部分だけ更新したり
とかって処理が必要かな」
『？　それってどうやるの？』
「 InvalidateRect() って更新できる範囲を変えられたでしょ」
『あー。でも……入力された文字が画面上のどこに出るのかってわかる
の？』
「それは大丈夫。ちょっと試してみようか」

void CSdiTestView::OnDraw(CDC* pDC)
{
    CSdiTestDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);

    // これまでに入力された文字列を出力。
    pDC->TextOut( 0, 0, m_cMainTextStr );

    // 以下追加。
    // 文字列が入る四角を取得。
    CSize cSize = pDC->GetTextExtent( m_cMainTextStr );
    TRACE( "%d, %d\n", cSize.cx, cSize.cy );
}

「この最後の３行を追加して」
『 CDC::GetTextExtent() ってメンバ関数呼んでるね』
「これは、渡された文字列を書き込んだときの横幅と縦幅を取得する関数。
とりあえず試してみて」
『ほい。お』

8, 18
16, 18
24, 18
32, 18

『って増えてく！』
「左が横幅、右が縦幅」
『そっか、文字の数が増えれば横幅は増えてく、でも縦は変わらないわけ
ね』
「ちなみに CSize はこういう横幅と縦幅を持つためのクラス。 CRect や 
CPoint とかと同じ種類のクラスだから」
『ただデータ入れるためだけのってわけね。質問！』
「はい火美ちゃん」
『このメンバ関数って、なんでデバイスコンテキストが必要なの？』
「 Version 7.13 ( No.133 ) でやったように、フォントのサイズ種類やサ
イズってデバイスコンテキストに登録してから使うでしょ」
『あ！　そっか、そういうのが決まらないとサイズも決まらないんだ』
「ここで取得してるサイズは、そのデバイスコンテキストが今持ってるフォ
ントのもの。だから別のフォントのを取得するときには」
『別のフォントをデバイスコンテキストに持たせてからこれ呼ぶわけねー』
「たとえば、今は横幅って８ずつ一定に増えてるでしょ」
『そういえば、プロポーショナルフォント、だっけ、あれだと横幅って一定
じゃないよね』
「そう、そういうときにはフォントの種類も重要だから」
『そういうのをちゃんとセットしてから取得する必要があるわけね』
「漢字だとまた違ってくるし」
『あ、ちゃんと漢字の時のサイズも分かるんだね。あ！　もひとつ質問！』
「はい火美ちゃん」
『改行がうまくいかないけどなんで！？　文字列の縦幅は変わらないし、画
面も黒いのが表示されるだけだし』
「これは色々理由があるんだよね。まず、 CDC::GetTextExtent() は改行は
無視するから」
『げ、それってめんどくない？』
「面倒じゃないよ。文字の高さはプロポーショナルフォントでも文字毎に違
うことはないから、普通に１行分取得して、行数だけ増やせば」
『でも、今何行あるかとかわかんないじゃん』
「あ、その辺になるんだね……その辺はもうちょっとあとで。とりあえず計
算すれば高さは分かるってことで。あともうひとつ。えーっと」

void CSdiTestView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    // メンバ変数に入力した文字を追加。
    m_cMainTextStr += nChar;
    // 再描画を指示。
    InvalidateRect( NULL );

    // 文字コードを１６進表示。
    TRACE( "%X, %X\n", nChar, '\n' );    // ここ追加。

    CView::OnChar(nChar, nRepCnt, nFlags);
}

「って修正して、リターン押してみて」
『ほい。あ』

D, A

『改行じゃない……って、どういうこと？　リターン押したら \n が送られ
て来てないってこと？？』
「そう、正確に言うと \r が送られてきてるんです」
『な、なにそれ……』
「それに、デリートキーやカーソルキーも効かないでしょ」
『そういえば CSdiTestView::OnChar() が呼ばれない……』
「というわけで続く！」

/*
    Preview Next Story!
*/
『改行なのに改行じゃない！？　いったいなんなのー！？』
「そこには複雑な話が隠されているのです」
『複雑はイヤー！』
「でも、これは避けて通れない道だから」
『仕方ないのね……』
「ちなみにそういう道がいっぱいあります」
『へ？』
「というわけで次回」
＜ Version 9.17 キー入力の秘密 ＞
『につづく！』
「来週はプログラマー辞めたくなるかもよ？」
『辞めてもいい？』
「せめて連載が終わるまではがんばって」
『うう……』


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

