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

    KAB-studio.h


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

    送信日： 2002/10/14(Mon) No.178
    配信数： 3600 ( 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/Comic/HotHerb/


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

2002/10/06 (Sun)
　１０月表紙壁紙のファイルサイズが全部で２００メガ。お昼に新しいＰＣ
到着。移行は結構あっさりと。 Maya は速いけど Shade はまぁまぁ？　２
Ｄがさくさく動くのがいい感じ。裏葉の声が……。テレビは……月姫アニメ
版はやっぱホントなのね。

2002/10/07 (Mon)
　かなり眠かった。会社で面白いことが。でも秘密。あの額のマークはどう
か。メルブラがいい感じ。ＣＧギャラリーのヒット数がいまいち……。

2002/10/08 (Tue)
　仕事はメインシステムのデバッグ。なぜかかなり眠い。 AIRRADE 難し
い。日記で新企画「日記単語」。今日は「メルブラ」。グラヴィオンはちぐ
はぐですなぁ。

2002/10/09 (Wed)
　今日のテーブルのは結構大変だった。秋葉様〜。「ななこ」。 ROBIN が
かなり気合い入ってきました。 Kiddy Grade はそれほどでも？　でもいい
んじゃ？

2002/10/10 (Thu)
　仕事は単体テストやっと完了。高い味噌。ぷらとわホームページ化。
「ぷらとわ」。灰羽連盟がいい感じ〜。

2002/10/11 (Fri)
　テスト仕様書を書いてバグが見つかる。「 Shade 」と「 Maya 」。高い
よね。 .hack// のＯＶＡ２巻目。そして灰羽と SEED 。

2002/10/12 (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.17
キー入力の秘密

「というわけで、前回の続きから」

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 の両方を１６進数で表したもの」
『ようするに数字でってことだよね。 D は 13 で A は 10 だね』
「そう。ここからはちょーっと難しくなるし、後でまたちゃんと解説するか
ら」
『わかんなくてもいい？』
「うん、解らなくてもいいけどがんばってみて」
『がんばってみます！　で？』
「まず、今まで改行は \n って言ってきたよね」
『うん。だから今度もリターンキー押したらそれが出ると思ったんだけど、
違うのだね。この前はこれ、 \r って言ってたね』
「そう、 \r 。実は改行には２種類あるんです」

\r : キャリッジリターン ( Carriage Return ) 0x0D
\n : ラインフィード ( line feed ) 0x0A

『２種類あるんだねー。でも今まで \r って出てこなかったよね』
「それは、実際には \r では改行できないから」
『へ、そうなの？』
「たとえば」

    TRACE( "改行前\r改行後" );

「ってしても改行しないから」
『ホントだ、じゃあ改行でもなんでもないんじゃない』
「ところがそうじゃないんだよね。えっと、適当なテキストファイルを新規
作成して」
『ほーい。右クリック新規作成テキストファイルっと。中身は？』
「中身は」

AAA
BBB

「ってして」
『ほい』
「じゃあ、それを VC でバイナリーモードで開いて」
『ほいほい』
「ちなみにバイナリーモードは Version 1.0 ( No.003 ) を参照」
『１回目……お、こんなん出てきたよ？』

000000  41 41 41 0D 0A 42 42 42                        AAA..BBB

「 A は１６進数で 0x41 、 B は 0x42 だから」
『ってことは間にある 0D 0A ってのが改行……？？？　って、これってつ
まり \r\n って並んで入ってるってこと？？』
「そういうこと。つまり、テキストファイルの中での改行は \r\n ってこと
なんです」
『？？？　二文字で改行ってなんか不思議……』
「だから、改行に \r も関係してるんです。ただ、改行が \r\n なのはウィ
ンドウズだから」
『え？　ってことは他のＯＳは？』
「 \r だけだったり \n だけだったり」
『なにそれ……』
「プログラムでファイルに書き込むときは \n でいいんだけど、それをＯＳ
ごとに \r\n や \r とかに変換してファイルに書き込んでるんです」
『な、なんか複雑！』
「そう、この辺は文字コードの問題で」
『文字コードっていろんなとこで話題になってるよね』
「そう、プログラミングの中でやっかいな問題のひとつ。これは数章あとで
じっくり取りかかるから、それまでは」
『パスってことね』
「で、話を戻して。ウィンドウズのテキストファイルが \r\n ってことも
あって、ウィンドウズの中身的には改行が \r って部分があるんです」
『だから改行すると \r が来る？』
「ってことかな。他にも、エディットボックスあるでしょ」
『うん。あれも \r\n ？』
「そう、エディットボックスは複数行にできるんだけど、その時入ってる改
行も \r\n なんだよね」
『なんか複雑ね……』
「そう、実際複雑だから。プログラミングでは気をつけなきゃいけない部分
があって」
『そのひとつがこの改行の問題なわけね』
「改行コード問題って言って、根が深い問題だから。これからも、こういう
気を付けなきゃいけないことがいっぱいあるから」
『……いっぱい？』
「実際のプログラムに関わってくるのはその一部なんだけど、自分が作るプ
ログラムがその問題に関わってくる、ってことに気付かなきゃいけないか
ら」
『どゆこと？』
「たとえば、普通にプログラミングしてる時には改行コードは気にしなくて
いいでしょ」
『うん、今までは特に問題なかったもんね』
「でも、火美ちゃんが他のＯＳ向けのテキストファイルを作ることになった
ら」
『その時に改行コードの問題が……それに気付かなきゃいけない！！』
「そういうこと。これってかなり重要だから」
『ちょいまち！！　あたし、改行コードひとつならなんとかなると思うけ
ど、いっぱいあったら！！』
「でもそのいっぱいを憶えていて、常に気をつけなきゃいけないし、最新情
報も取り入れないと」
『それってかなり大変！！』
「もちろん大変だし……まぁ、世の中のプログラマーのほとんどはそういう
の全然気にしないから問題ないってことも言えるけどね……」
『うわぁ、なんか暗くなってるし……』
「ま、その辺は言ってたら切りないし、とりあえず覚悟だけしておいて」
『覚悟、ねぇ……』
「さて。ここまでは改行コードの話だったけど、ここからはまた別の問題に
ついて説明します」
『つまり、それもいっぱいの中のひとつ？』
「ううん、これはそれほど気にしなくていい話。前回、カーソルキーが効か
ないって話をちょっとだけしたでしょ」
『あ、そういえばカーソルキー押してもあのメンバ関数は呼ばれないよね』
「そう、これがもうひとつの問題。 CSdiTestView::OnChar() の第１引数の 
nChar に入力した文字が入ってたよね」
『うん、入ってた』
「ってことはこれは文字ってこと」
『あ！　カーソルキーとか、文字で表せない！？』
「そゆこと。だから送られてこないんです」
『なるほど。でもさ、それだとカーソルキー押されたときにカーソル移動、
とかってできないじゃん』
「それは別のメンバ関数で受け取るんです。正確に言うとメッセージだけ
ど。 CSdiTestView::OnChar() は WM_CHAR だったでしょ」
『 Version 9.15 ( No.176 ) でやったね』
「カーソルキーとかは WM_KEYDOWN と WM_KEYUP ってメッセージでするんで
す」
『ってことはそれようのメンバ関数を作ればいいんだ』
「そゆこと。実際に作ってみようか。クラスウィザードを開いて」
『 CSdiTestView::OnChar() と同じだよね。 WM_KEYDOWN と WM_KEYUP 、
どっち？』
「 WM_KEYDOWN の方。マウスと違って、キーボードはリピートがあるから」
『離したとき、じゃないわけねー。関数の追加っと。お、 
CSdiTestView::OnKeyDown() って関数ができた』
「これなら、全部のキー入力を拾えます。これをこう修正してみて」

void CSdiTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    if( nChar == VK_LEFT )
    {
        TRACE( "左カーソルキーが押されました。\n" );
    }
    
    CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

『お、左カーソルキーを押すとちゃんと引っかかる……けど、 VK_LEFT 
って何？』
「これは左カーソルキーを意味する【仮想キーコード】」
『仮想キーコード？』
「そう。 CSdiTestView::OnChar() の第１引数には文字が入ってたでしょ。 
CSdiTestView::OnKeyDown() の第１引数は文字じゃない、仮想キーコードが
入ってるんです」
『だからカーソルキーも大丈夫？』
「そういうこと。仮想キーコードは〈特定のキー〉を指してて、左カーソル
キーなら VK_LEFT 、シフトキーなら VK_SHIFT 、ってぐあい」
『ってことは普通の A なら VK_A ？』
「じゃないんだよね。それは普通の文字。こんな感じに」

void CSdiTestView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
    if( nChar == 'A' )
    {
        TRACE( "Aキーが押されました。\n" );
    }
    
    CView::OnKeyDown(nChar, nRepCnt, nFlags);
}

『あらま』
「で、ここからが問題。実際に試してみて」
『うん。 A 押すとちゃんと呼ばれるよ』
「画面に出力される文字は？」
『 a ……あ！　大文字小文字違う！』
「そゆこと。仮想キーコードは大文字小文字は関係ないんです」
『そっか、キーだからそんなの関係ないんだもんね。でも、それって不便じ
ゃない？』
「だからそのために CSdiTestView::OnChar() があるってこと」
『おお！　つまり、文字は OnChar() 、直接のキー入力は OnKeyDown() 
ってわけね』
「そういう使い分けが必要ってことだね。この辺はややこしいから注意して
ね」
『ややこしい……けど、こういう仕組みは便利よねー』
「あ、ちなみにこれ、 MFC の機能だから」
『……それってつまり、 MFC 使わなかったら自分でやんなきゃいけないっ
てことですか？』
「そういうこと。あ、あと、仮想キーコードって MSDN に載ってないっぽい
から、 winuser.h を直接見てください。さて」
『さて？』
「ずっと MFC を使った SDI プログラムを見てきたけど、この辺で一度切り
上げます」
『え？　こんなとこでいいの？』
「んーと、はっきり言って中途半端」
『やっぱそうなんだ』
「 MFC を使った SDI アプリは、実は機能がかなりいっぱいあるんです」
『それを説明するときりがない？』
「それもあるんだけど、それよりももっと基礎知識を付けておいた方がいい
から。というわけで新章に続く！」

/*
    Preview Next Story!
*/
『確かにねー』
「何が？」
『ほらさ、新しい機能の次の回は、 C++ の勉強だったでしょ』
「それはそれでいいと思うんだけど、そればっかりもね」
『ちゃんと勉強してからってことね』
「そゆこと」
『というわけで次回』
＜ Version 10.01 １からウィンドウを作る！ ＞
「につづく！」
『……でも、相変わらず……』
「相変わらず？」
『無計画よねー』
「う”」


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

