
/*
    KAB-studio.h
        　ＫＡＢ−ｓｔｕｄｉｏで先週更新した内容
        が格納されたヘッダーファイルです（笑）。

    (C)KAB-studio 1999 ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp

    送信日： 1999/10/25(Mon) No.029
    配信数： 2970（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/


/*                        今週の「どう？」                        */

『じゃ、次のお便り』
「ってゆーかないんだよねー」
『あらまた』
「ま、今はじっと我慢の時かもね」
『なにが？』
「いろいろ」
『ふーん。私たちは KAB-studio.h や #pragma twice についてのご意見ご
希望ご感想を切望しています！！』
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
「のページで送ってください」
『お待ちしてまーす！』


/*                １９９９年１０月２５日（月）の更新              */
http://www2.justnet.ne.jp/~kabstudio/Info/News/

・KAB-studio.h のカテゴリを変更。
　まぐまぐでの KAB-studio.h のカテゴリを、「科学・技術:プログラミング
(Ｃ言語)」から「マルチメディア:プログラミング(Ｃ言語)」に移しました。
　理由は……その方が購読登録数が伸びそうだから（爆）。もしあんま変わ
らなかったら元に戻すかも。とりあえず試させてね。
　ちなみに購読登録・解除方法は変わらないはずなのでご心配なく。それと
Pubzine 経由の方は全然関係ないです（汗）。



/*                        チョー普通な日記                        */
http://www2.justnet.ne.jp/~kabstudio/nikki2/

１９９９年１０月１７日（日）：
　実験レポートについてホームページを検索することが多いんだけど、なか
なかいいページがなかったり、有効な資料が見つかったりして面白いです。
うーん、真面目な使い方だ（爆）。

１９９９年１０月１８日（月）：
　KAB が間違えられる危険性、大。ドラクエ。そして日産村山工場。やばい
ぜおい。

１９９９年１０月１９日（火）：
　文具とかゲームとかアニメとか格闘技とかいろいろ。多趣味やねぇ。

１９９９年１０月２０日（水）：
　１１月イラスト完成！　しかーし、出来は……ふぅ。イラストって難しい
よねー。小説もうまくいかないし。んでも作りたくなっちゃう、それがわて。

１９９９年１０月２１日（木）：
　「日本伝統武術論」の講義初日の風景。センセは柳澤久って人なんだけど、
知ってます？　有名人らしいです、はい。

１９９９年１０月２２日（金）：
　実験〜、うまくいかない〜、疲れた〜、ねむい〜、そんな感じ〜。

１９９９年１０月２３日（土）：
　のんびりです。フィーネです。


/*                       #pragma twice                            */


　Version 3.4
ウィンドウとウィンドウハンドル

「これまではクラスについて見てきました」
『クラスは、型のひとつ。ＭＦＣのクラスを継承した新しいクラスを作って、
そのクラスの型の変数を作って、そのメンバ関数を呼び出して、色々するの』
「そういうことでした。今回はまず〈ハンドル〉っていうものから」
『ハンドルって、車に付いてて右曲がったりするの？』
「意味的には同じ。えっと、Ver1.5（No.008）で、ウィンドウとかアイコン
が〈ウィンドウズが管理してるもの〉って言ったよね」
『そういえばそんなこと言ってたね』
「ウィンドウやアイコンを作るときには、CreateWindow() とかの、ＡＰＩ
に入ってる関数を使います」
『ＡＰＩって、ウィンドウズを操作するためのライブラリ、だよね』
「そうそう。ウィンドウズに、これこれこーゆーウィンドウを作ってくださ
い！　ってお願いするわけだね」
『で、作ってもらったら？』
「ここからがミソ。作ってもらっても、そのウィンドウやアイコンそのもの
は渡してはくれなくて、間接的に操作するための〈ＩＤナンバー〉を渡され
るだけ」
『ＩＤナンバー？　ってことは数字なんだ』
「そう、作ったウィンドウやアイコンには数字が割り振られて、操作用のＡ
ＰＩにその番号を渡すことで〈何を指定するか〉を示すわけ」
『そこの１２番、廊下で立ってなさい！　みたいな？』
「まー、そんな感じ。このＩＤナンバーこそが」
『ハンドル！』
「ってこと。このハンドルがあることで初めて、ウィンドウなんかを操作で
きるってこと」
『でも〈ハンドル〉って意味と違くない？』
「ま、〈操作するもの〉って意味かな。それにハンドルには〈名前〉とかっ
て意味もあるし」
『ハンドルネームとかの？』
「そんな感じかな。じゃ、まず、ウィンドウのハンドルを見ちゃおうか」
『ってそんな簡単に見られるもんなの？』
「見られるんだよね、これが。えっとまず、 Calc を実行して」
『えっと……ビルドして実行っと、なんかこうしないとよく分かんなくて』
「うーん、まあいっか。で、実行したらほっといてね」
『ほっとくの？』
「そう。次に、ＶＣのメニューの【ツール】−【Spy++】を選んで」
『すぱいっと……あ、なんかアプリが出た』
「これは〈Spy++〉って言って、ＶＣに付いてくるツールアプリのひとつ」
　Spy++ のウィンドウにはツリーが表示されている。
『一番上に〈デスクトップ〉って書いてあるね』
「これは、ウィンドウの一覧」
『ダメよ水希ちゃんウソついたら』
「え？」
『だって、こんなにウィンドウ開いてないもん、今だってさっきの Calc と
かＶＣとかしか開いてないし』
「実はウィンドウはね、非表示にできるんだよ」
『またまた水希ちゃんったら、冗談ばっかり』
「え？？」
『だって、見えないウィンドウになんの価値があるの？　なんの役にも立た
ないのに』
「実はこれが役に立つんだよね」
『え？』
「まだ難しいからもう少し先になってから話すけど、簡単に言えば、ウィン
ドウを作っておくとイベントを受け取りやすくなるから」
『イベントを受け取る？』
「そ。非表示になってて、たとえばタスクトレイのアイコンをクリックした
ときにそのイベントを受け取って、処理する。そんなことをするためにわざ
わざウィンドウを作っておくわけだ」
『へー、なんか複雑なのね……』
「ウィンドウシステムを理解してないとちょっと難しいかな。さて！　この
一覧がウィンドウだってことは、こんなかに Calc があればわかるでしょ」
『あ、そっか。 Calc はっと……あ、あった！』

00000E60 "Calc" #32770 (ダイアログ)

「数字とかは実行するたびに変わるから注意してねってことで」
『これがホントに Calc ダイアログなのかな』
「ということで、前々回に作った〈ウィンドウタイトルを変えるプログラム〉
はまだ残ってる？」
『あ、そっか！　【＝】ボタン押して、 Calc ダイアログの名前が〈あいう
えお〉になって……あれ？』
「Spy++ の方は、メニューの【ウィンドウ】−【最新表示】を選ばないと更
新されないから」
『あ、そうなんだ。最新表示っと……えっと、あいうえお……あった！！』

00000E60 "あいうえお" #32770 (ダイアログ)

『ホントだー、あいうえおがある……あ！』
「な、なに？」
『ここに書いてある #32770 ってのが、ハンドルってのでしょ！！』
「それが違うんだな」
『ええ？？』
「実は、最初の【00000E60】がウィンドウハンドル」
『嘘よ嘘！！』
「言うと思った……どうせ〈番号じゃないじゃない！〉とか言うんでしょ」
『そうよー』
「うーん、１６進数の話、簡単にしておこうかな……」
『じゅーろくしんすー？』
「そ、いつも使ってる数字のが〈１０進数〉で、これは〈１６進数〉」
『じゅっしんすー、じゅーろくしんすー……』
「〈なんとか進数〉っていうのは、〈なんとか〉の数字になった時にひとつ
位が上がるっていう意味」
『？？』
「たとえば〈秒〉は、６０秒で１分、つまり〈６０になったときに【分】の
位に上がる〉から〈６０進数〉」
『ってことは時間だったら２４進数で、このビルだったら４９進数ね』
「４９進数？？」
『このビルって階段が４９段じゃない』
「４９段上ったらひとつ上の階……まああってるけど、なんでそんなこと
知ってるの……」
『なんとなく。で、１６進数ってことは、１６になったらひとつ上の位って
ことよね』
「ま、試したみた方が解りやすいかな。まず Calc ダイアログを閉じて」
『【OK】 ボタンっと』
「で、いつものメンバ関数をこう書き換えて」

void CCalcDlg::OnBEqual() 
{
    for( int iF1 = 0; iF1 <= 18; iF1++ )
    {
        TRACE( "%d, %X\n", iF1, iF1 );
    }
}

『んーと、 for だから繰り返し。ゼロから始まって……１８になるまでだ
から１８回の繰り返し？』
「１９回だよ、ゼロも入るんだから」
『あ、そっか。で、 TRACE() で、for でひとつずつ増やしている数を表示
して……あれ？　%X って初見だね』
「これがミソ。 %d は数字を表示するときの記号だったでしょ」
『うん、いつもこれ使ってたよね』
「%X は、数字を１６進数として表示するためのもの」
『これがそうなのねー、じゃ、さっそくビルドして実行っと』

0, 0
1, 1
（略）
9, 9
10, A
11, B
（略）
15, F
16, 10
17, 11
18, 12

『あ！　アルファベット出てきた』
「左がいつも使ってる〈１０進数〉、右は新しく出てきた〈１６進数〉。ま
ず、１６進数ってことは〈１６になるまでは位を上げちゃいけない〉から、
１０や１１の代わりにＡやＢを使います」
『あ、それでアルファベットが出てくるんだ』
「そうするとＦが１５になるよね。で、さらに１増えたら、やっと次の桁」
『つまり１０になるってことなのねー』
「そういうこと。で、注意！！」
『な、なに？』
「１６進数っていうのはただの〈表現方法〉。だから、結局 iF1 の中に普
通の数字が入ってることには変わりないからね」
『つまり iF1 の中に入ってる１０とかって数字を、TRACE() と %X が１６
進数に変換してから表示してるってこと』
「そう。ま、この辺は実はもっと奥深いんだけど、それはまた今度ね」
『はーい。で、ハンドルも数字だと』
「そう。ハンドルは１６進数で表示するっていう習慣があるってだけだね。
単なる数字ってことには変わりないから」
『つまりウィンドウの出席番号ってわけだ』
「さて、このウィンドウハンドルを取得するためのメンバ関数が CWnd にあ
るから、最後にこれを使ってみようか」
『はーい』

void CCalcDlg::OnBEqual() 
{
    TRACE( "%X\n", GetSafeHwnd() );
}

『この GetSafeHwnd() っていうのがそうなの？』
「来週もっと詳しく見るけど、この CWnd::GetSafeHwnd() の戻り値にウィ
ンドウハンドルが返ってくるから、それを TRACE() で表示してみようって
わけ」
『だから %X なのね。ビルドして実行』

4DC

『あれ、シンプルだね』
「最初のゼロとかは省略されて表示されるからね。これが、今表示されてい
る Calc ダイアログのウィンドウハンドル。これを確認する方法は？」
『さっきの Spy++ ！！』
「そうそう。 Spy++ の表示を更新して、Calc ダイアログを探してみて」
『あった！』

000004DC "Calc" #32770 (ダイアログ)

『ホントだー、ウィンドウハンドルおんなじだね』
「この番号、ウィンドウハンドルでウィンドウを区別してるわけだ」


/*
    Preview Next Story!
*/
「次回はまたクラスに戻って、ハンドルとの関連について見ていきます」
『ウィンドウ操作にハンドルを使うっていうのも、ルールのひとつ？』
「そだね、ウィンドウズのルール」
『なんかめんどくさー、もっと簡単になんないかなー』
「たとえば？」
『たとえば〈ウィンドウ出ろ！〉って言うだけとか』
「そしたらプログラマーって要らないかもね」
『それはそーかも』
「というわけで次回」
＜ Version 3.5 ウィンドウハンドルとＡＰＩ ＞
『につづく！！』
「実際、プログラマーなんてただの下働きに過ぎないんだから……」
『あら黄昏ちゃった』
「クライアントは無理言うしさ、いいプログラム書いても評価されないしさ、
給料安いしさ、あげくにこんなとこ送られるし、皆さん、プログラマーなん
てなるもんじゃないですよ……」
『身も蓋もない……』



/*            １９９９年１１月１日（月）の更新予定                */

・表紙を１１月バージョンに。
　毎月恒例、新しい表紙です。１０月のが祝１０万ヒットと兼ねてた関係で
ちょっと久しぶりですが、その時間の長さに反比例する出来になってしまい
ました（泣）。完成しただけでも奇跡ってことで許してねん。


/*                          ご注意！！                            */

・このメールを返信しないでください。
・感想はこのページから送ってください。
http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/Impression/
・購読登録を解除したいときには下のページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198
http://www2.justnet.ne.jp/~kabstudio/Freeware/

/*
    KAB-studio.h
    Weekly Mail Magazine.
    Written by Kaburaya Seiden.

    (C)KAB-studio 1999 ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                      See you next week!!                      */


