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

    KAB-studio.h


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

    送信日： 2001/11/12(Mon) No.132
    配信数： 3800 ( 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/11/04 (Sun)
　のんびりしつつもぷらとわ２話にホットハーブ。でもテレビやビデオを見
て一日が終わったような。スナッチは……ようわからん（汗）。Ｎスペは自
衛隊。っつーか放送遅すぎ？

2001/11/05 (Mon)
　８時半まで残業。客先で使う資料を手直しとかが必要だったんで。そして
ラジオとテレビの周波数。ちょっと目から鱗。

2001/11/06 (Tue)
　お仕事は朝からお昼過ぎまで資料作り、そのあと客先へ。これでひと段
落。本屋で英語版アルジャーノンに花束をとラブひな８巻購入。げんこつ屋
ラーメン。肉体の限界……持久力がなー。

2001/11/07 (Wed)
　お仕事はひと段落。これから作業に入るけど、どこからどこまで自分で作
るべきか……。それにしても最近眠い。資料作りばっかだし。むぅ。欲しい
もの。それは一番泣けるゲーム……。

2001/11/08 (Thu)
　またも新木場へ！　むこうへ行ってその場でデバッグ。結局１１時半まで
かかったし……。そして Kanon 以上のお勧め。でも時間が。それに Rez が
出るのに気付かなかったし。そしてにちゃんねるネタ。どうも、こういうの
は……。

2001/11/09 (Fri)
　お仕事は昨日の新木場のを持ち帰って。かなり悩まされたタコなバグ。
ミーティングして、そして徹ゲー。ゲンフー強い。ビデオはココロ図書館が
結構いいかもしんない。

2001/11/10 (Sat)
　徹ゲーの反動でやる気なし。さらに寝るし。 PRIDE17 はなんか。最近ど
うも、総合系も……だから K1 へのアプローチは魅力？


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

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

「で……ここはなんなのよ！」
　着いた先は、公園だった。いつも舞達が絵を描いているところよりも広い
が、人はほとんどいなかった。町中にぽつんとある、木々に覆われじめじめ
とした、何かに忘れ去られたような場所だった。
「いつもの公園とは大違いよね」
「まさか、ピクニックとでも言うんじゃないでしょうね」
「ん？」
　と、雅樹はフライドチキンをほおばりながら振り向いた。
「電車代だってばかにならないんだけどなぁ」
　信吾のぼやきも、雅樹には聞こえてないようだった。舞の口は怒っていな
がらも、その瞳は雅樹を追っていた。雅樹はぐるりと周りを見回したあと、
木々の影へと入っていく。
　舞はその後ろを付いて行き、俊雄も付いて行く。恭子と信吾はあまり乗り
気ではなかったが、それでも付いて行った。
　木でできたベンチに、男が座っていた。新聞を高々と掲げていて、顔は見
えない。すっと新聞がわずかながら降り、雅樹とその男の目があった。
「なんなんだ？　そのガキどもは」
「社会科見学ってヤツさ」
「なムグ」
　信吾の口を抑えながら、恭子は愛想笑いを見せた。
「手短に頼む。実は時間がないんでな」
　その雅樹の言葉は誰も理解できなかったが、雅樹はある方向へと顎をしゃ
くり、舞は、その意味に気づいた。気づかれないようにバッグの中の水筒を
確認する。
「で？」
「……」
　男は一度周りを確認してから、再び顔を覆った。高校生四人という状況は
危険だと感じていたが、それでも、口は開いた。
「どっかの会社が、あんたのこと調べてる」
「どっかって、どんななんの会社」
「そこまではわからんが、まあひとつじゃあないらしい」
「なんだよそりゃ」
「そうそう、他に結白舞っていう女もターゲットらしい。知ってるか」
「いや、知らないな」
　一瞬のざわつきも、その雅樹の言葉が掻き消した。
「他には？」
「今日はこんなところだ。急ぐんだろ？」
「ああ……」
　すっと立ち上がり、舞の方を見る。舞も、雅樹の方を見る。水筒を手にし
て。
「……どうした？」
「あんたは俺のこと、記事にしないのか？」
「あんたに恨まれるようなことをするほど馬鹿じゃあない。ま、まだ俺は何
も掴んじゃいない、それだけさ」
「じゃぁ、今日これから起こることを記事にしてくれ」
「え！？」
　舞は水筒の口を開け、雅樹は右手を目の前にかざした。
『水よ、我が心と供に！』
『橙炎連燃！』
　舞の体が水をまとい、雅樹の右手に火が灯った。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『お、購読登録数が 3800 に戻った！』
「一時期減ったけど、最近少しずつ戻ってきたからね」
『なんで減ったんだっけ』
「プログラミング辞書の更新をやめたからね」
『そっか、今年の春の模様替えの時のね』
「プログラミングのはもう #pragma twice だけ」
『あと小説と日記のダイジェスト。なーんか寂しいよねー』
「でも、時間的にこれ以上増やすのは無理みたい」
『ま、いーんじゃないの？　Java メルマガ、たった 22 だし』
「う”」
『ってことは、質はともかくタダがいいってことなんだし』
「そうなのかなぁ」
『そうなの！　今のまま続けてけばいいんじゃない？』
「いいのかなぁ」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 7.12
文字を書こう！

「さて、今回は文字を書いてみます」
『文字を書く！　なんか大変そう』
「それが大変じゃないんだよね」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    const char pchText[] = "あいうえお";

    // 文字を書きます。
    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );
}

『あら簡単』
「文字を書くのは TextOut() って API 」
『第１引数はデバイスコンテキスト、第２、３引数は書く位置ね。第４引数
は書く文字列、第５引数は……その文字数？』
「文字数っていうか長さね。これで文字をデバイスコンテキストに書くこと
ができます」
『ほい。お、ちゃんと出た』
「これだけなら簡単にできるってことだね」
『あれ、でもなんか背景色が変……』
「これは Ver 7.10 ( No.130 ) の背景モードと同じ、 SetBkMode() を使い
ます」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    const char pchText[] = "あいうえお";

    // 背景を透明モードに。
    ::SetBkMode( hCanvasDC, TRANSPARENT );

    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );
}

『あ、今度はちゃんとデバイスコンテキストと同じ色になった』
「同じく、背景色を変えることもできます」
『文字の色は？　ペン？』
「ううん、 SetTextColor() って専用の API があるからそれで」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    const char pchText[] = "あいうえお";

    // 文字色変更。
    ::SetTextColor( hCanvasDC, RGB( 255, 0, 0 ) );
    // 背景色変更。
    ::SetBkColor( hCanvasDC, RGB( 0, 0, 255 ) );

    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );
}

『おお、文字が赤く、背景が青くなった！』
「こういうふうに、文字を書く時も、他のと違う部分があるからねー」
『っつーか、そういうのを憶えるのがこのシリーズのテーマじゃないの？』
「それはそうだけど、文字列関係は特別に特別な部分が多いかな。文字を書
くってことは、結構面倒な部分多くてねー」
『たとえば？』
「たとえば、位置」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    ::SetBkMode( hCanvasDC, TRANSPARENT );

    const char pchText[] = "あいうえお";
    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );

    const char pchText2[] = "かきくけこ";
    ::TextOut( hCanvasDC, 0, 0, pchText2, strlen( pchText2 ) );
}

『ん？　ただ２度書いてるだけじゃない』
「そう。だから」
『あいうえおの上にかきくけこが書かれてる……』
「ってことは、今書いた文の次に新しい文を書く時には、 TextOut() の第
２引数で指定する X 座標を増やさないといけないわけ」
『げ！　そういえばそうね、それってめんどくさそう』
「というわけで、自動的に次の位置に持ってきてくれるモードがあります」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    ::SetBkMode( hCanvasDC, TRANSPARENT );

    // 座標移動モード。
    ::SetTextAlign( hCanvasDC, TA_UPDATECP );

    const char pchText[] = "あいうえお";
    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );

    const char pchText2[] = "かきくけこ";
    ::TextOut( hCanvasDC, 0, 0, pchText2, strlen( pchText2 ) );
}

『 SetTextAlign() を使うんだ』
「この API に TA_UPDATECP を渡すと」
『あいうえおかきくけこってなった！』
「直前に書いた位置をしらべて、自動的にそのあとに継ぎ足してくれるわ
け」
『便利ねー』
「他にも、手動で移動する方法もあります」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );

    const char pchText[] = "あいうえお";
    SIZE stSize;

    ::GetTextExtentPoint32
        ( hCanvasDC, pchText, strlen( pchText )
        , &stSize );
    TRACE( "%d, %d\n", stSize.cx, stSize.cy );
    // 80, 18
}

『 GetTextExtentPoint32() って API 使って……何してるの？』
「〈あいうえお〉って文字列の横幅と高さを調べてます」
『……？？　どゆこと？』
「後で教えるけど、こういうふうに書き込む文字列は、フォントとか文字の
大きさとかも変えられます」
『変えられなきゃ困るもんね』
「でもそしたら、〈次の位置〉を TextOut() の第２、第３引数で指定する
時に困るでしょ」
『そういえば！　つまり、次に書く時に〈あいうえお〉の〈お〉の右端の位
置が分からなきゃいけないわけだ』
「それを取得するのが GetTextExtentPoint32() 」
『第１引数にデバイスコンテキスト、第２引数と第３引数は文字列の、第４
引数……の SIZE って？』
「 RECT みたいな構造体で、これは横幅と縦幅だけを入れるためのもの」
『なるほど、 SIZE::cx と SIZE::cy に、第２引数の文字列の横幅と高さが
入るわけだ』
「そゆこと。で、ここでは横幅 80 、高さ 18 ってことが分かりました」
『……ホントにそう？』
「文字列を〈あいうえおあいうえお〉にすれば」
『あ、横幅が倍になった』
「他に、実際に画像処理ソフトでキャプチャーしたものを計ってもいいし」
『それってなんかアレ……』
「で、これを踏まえて、実際に横幅の分だけ進めてみましょう」

void CAnimeDlg::OnBDraw() 
{
    HDC hCanvasDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );

    const char pchText[] = "あいうえお";
    ::TextOut( hCanvasDC, 0, 0, pchText, strlen( pchText ) );

    SIZE stSize;
    ::GetTextExtentPoint32( hCanvasDC, pchText, strlen( pchText ), &stSize );

    const char pchText2[] = "かきくけこ";
    // 進めて書き込みます。
    ::TextOut( hCanvasDC, stSize.cx, 0, pchText2, strlen( pchText2 ) );
}

『お、最後の TextOut() でその横幅分進めてる』
「こうすれば」
『あいうえおかきくけになるわけね』
「それに、最後の行を」

    ::TextOut( hCanvasDC, 0, stSize.cy, pchText2, strlen( pchText2 ) );

「に変えれば」
『２行目に書かれる！　そっかー、改行したいときはこういうふうにすれば
いいんだー』
「ただ、こういう風に直に書くことは、もしかしたら少ないかも」
『なんで？』
「だって、テキストボックスとかあるでしょ」
『あ、そういえば』
「テキストボックスだと色変えたりはできないんだけど、リッチエディット
ボックスっていうの使えば、こっちは変えることできるし」
『そういう便利なのを使えばいいってわけね』
「こっちなら文字の幅とか調べなくても普通に書き込めるし。ただ」
『ただ？』
「デバイスコンテキストに対して書くんならこういう形式じゃないといけな
いから、これは憶えとく必要あるかも」

/*
    Preview Next Story!
*/
『っつーか、全部憶えきれないって』
「んー、憶えとくと憶えないとこを分けるのが大事かも」
『分ける？』
「仕組みはしっかりイメージできるように憶えておいて」
『憶えなくていいのは？』
「それは、いっぱいメンバ変数のある構造体とか」
『げ、それイヤそう！』
「というわけで次回」
＜ Version 7.13 フォントを変えよう！ ＞
『につづく！』
「ってゆーか、僕自身憶えられないし」
『それ違うと思う』


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

