////////////////////////////////////////////////////////////////////
◎ ≪---= 業務用小型ダーツマシン「ダーツイーグル」

こんなに小さくても立派な業務マシン！
ダーツマシン設置でちょっとしたお小遣い稼ぎ。

できるだけ省スペースで、安価に置けるダーツマシンが↓ここ↓にあります。
『大阪ギフトショー新製品コンテスト大賞受賞！』
http://af1.mag2.com/m/af/0000008658/001/s00000001980002/006
////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2007/01/22(Mon) No.391
    配信数： 1661
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2007/01/22 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
17.30 デストラクタを仮想関数にする
17.31 動的型チェック
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

2007/01/22 (Mon)
　KAB-studio.hの縮刷版を更新！
[ ダウンロードルーム ]
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2007/01/14 (Sun)
　一応早起きモード。アニメ観て感想書いて閣下の大相撲中継聞きつつ
ほとはー外伝３描いて。明日からの予定。楽な点と大変な点。おしごと後も
忙しい。そしてお誕生日。

2007/01/15 (Mon)
　今日からおしごと。がんばって生徒を憶える。帰ってきて寝てしまう。

2007/01/16 (Tue)
　おしごと２日目。通勤にウォーキング。帰ってくると仮眠してしまう。
そしてお誕生日。

2007/01/17 (Wed)
　おしごと３日目。どことなくスレてる。世界樹の迷宮買えてない。

2007/01/18 (Thu)
　昨日の深夜に世界樹の迷宮（CD付き）購入！　そのまま２時半まで。
もちろんおしごとにも。帰ってからも……でも寝落ち。世界樹の迷宮
面白いです。そしてお誕生日。

2007/01/19 (Fri)
　おしごと５日目。講義は順調。演習が増えて負荷も増加。かなり
へろへろ、そのまま飲みへ。

2007/01/20 (Sat)
　８時半起き。世界樹の迷宮、昼寝、アニメ感想、きららとか。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2007/01/14 (Sun)
http://d.hatena.ne.jp/kab_studio/20070114
起きた。
[KAB-studio]ぷらとわ追加。
[KAB-studio][ほとはー]ほとはー外伝３ P.87
[アニメ]「牙」 第41話「囚われた思い」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第42話「ホンキがとどけばイイナ！」
[アニメ]ひまわりっ！！ 第2話「草を食らわば、毒までも」
[アニメ]京四郎と永遠の空 第2話「三華月百夜」
[アニメ]月面兎兵器ミーナ 第1話「はじめての汁実」(新)
[アニメ]神様家族 第2話「佐間太郎　初恋モーレツ大作戦！」

2007/01/15 (Mon)
http://d.hatena.ne.jp/kab_studio/20070115
起きた。
行ってきます。
帰ってきた。
[アニメ]金色のコルダ 第15話「高鳴る胸のアリア」
[アニメ]がくえんゆーとぴあ まなびストレート！ 第2話「まっすぐでゴー」
[アニメ]Master of Epic The AnimationAge 第2話

2007/01/16 (Tue)
http://d.hatena.ne.jp/kab_studio/20070116
起きた。
帰ってきた。
[アニメ]SHUFFLE! MEMORIES 第2話「芙蓉楓編 前編」
[アニメ]Pumpkin Scissors 第15話「迷走する選択」

2007/01/17 (Wed)
http://d.hatena.ne.jp/kab_studio/20070117
起きた。
帰ってきた。
[世界樹の迷宮]世界樹の迷宮購入！
[世界樹の迷宮]初イベントクリア！
[アニメ]DEATH NOTE 第14話「友達」
[アニメ]ネギま！？ 第16話「昨日の敵は今日の友」

2007/01/18 (Thu)
http://d.hatena.ne.jp/kab_studio/20070118
起きた。
帰ってきた。
[世界樹の迷宮]いざ2階へ！
[アニメ]武装錬金 第16話「新たなる力」

2007/01/19 (Fri)
http://d.hatena.ne.jp/kab_studio/20070119
起きた。
帰ってきた。
[世界樹の迷宮]2階制覇。
[アニメ]のだめカンタービレ 第2話
[きらら]まんがタイムきららMAX 2007年3月号
[アニメ]ひだまりスケッチ 第2話「8月21日 ニッポンの夏」
[アニメ]セイントオクトーバー 
　第3話「ロリ共闘！　お嬢様だって超変身！」
[アニメ]すもももももも〜地上最強のヨメ〜 
　第14話「お化け屋敷の恋騒動」

2007/01/20 (Sat)
http://d.hatena.ne.jp/kab_studio/20070120
起きた。
[世界樹の迷宮]4階クリア
[アニメ]デルトラクエスト 第3話「黄金の騎士ゴール」
[アニメ]彩雲国物語 第34話「毒をもって毒を制す」
[アニメ]おとぎ銃士 赤ずきん 第29話「ひとりぼっちのグレーテル」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第42話「ファインがお嫁さん？☆どきどきノーチェ」
[アニメ]コードギアス 反逆のルルーシュ 第14話「ギアス対ギアス」


////////////////////////////////////////////////////////////////////
// Ajaxでエロゲーを作るブログ
http://d.hatena.ne.jp/AjaxEroge/

（今週はお休みです）


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十五章　濁る澱み、清らかな血溜り　−１９−

「なんだい、あの鐘？」
　男は手際よくせんべいを白い紙袋に入れていきながら、つまらなそうに聞
き返す。
「あれはここじゃ昔からあるもんでね、今はもう作られてないんだわ」
「じゃあ結構古いものなんですか？」
「そうだろうね、オレが生まれた時からあったからなぁ。へいおまち！」
　茶色の紙袋を受け取り、代金を渡す。
「ありがとうございます……あれ？」
　いつの間にか少年がいなくなっていた。
「あの坊主？　隣行ったみたいだけど」
「あ、ありがとうございます」
　舞は頭を下げてとなりへと向かう。しかし隣にはおらず、その二軒先にい
た。
「ちょっと、勝手にいかないでよ……どうしたの？」
　そこは土産物屋で、軒先には無数の土産が置かれていた。が、少年はその
端の、別のものに気を取られていた。
　舞が近づくと、その少年が見る目の前で、天井から吊された鐘が、キィン
と音を立てた。
「あ、また……」
「駄目だよそれは、売りもんじゃないんだから」
　声音からして攻撃的な、幅の広い女性がやってきて、少年を睨み付ける。
「これと同じもの、売ってないんですか？」
「ないよ。もう作れないんだから。これだって重要文化財なんだから傷つけ
たらただじゃおかないよ」
　というわりにはその鐘は埃まみれで蜘蛛の巣さえ張っていたが、それでも
似た鐘が土産物の中にないため、売り物ではないことは分かるし、普通の土
産物とは違う荘厳さも感じなくはなかった。
　売り物ではないと言われても、少年はその鐘から目を逸らそうとはしなか
った。
「……どうしたの？」
「さっきの鐘の音――どこかで聞いた気がする。なんだか懐かしい音だっ
た――」
　舞ははっとする。ここは少年の故郷なのだから。あり得ないことではない
……そう思いたかった。
                                                              (続く)

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

（今週の追加はありません）


////////////////////////////////////////////////////////////////////
◎ ≪---= 業務用小型ダーツマシン「ダーツイーグル」

こんなに小さくても立派な業務マシン！
ダーツマシン設置でちょっとしたお小遣い稼ぎ。

できるだけ省スペースで、安価に置けるダーツマシンが↓ここ↓にあります。
『大阪ギフトショー新製品コンテスト大賞受賞！』
http://af1.mag2.com/m/af/0000008658/001/s00000001980002/006
////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 18.04
ウィンドウの 32 ビット整数値

「前回は、ウィンドウプロシージャを static メンバ関数にする方法を説明
しました」
『でもあんま意味ないよね』
「そう、はっきり言って意味ないです」
『うぉ言い切りやがった』
「なぜかというと、 static メンバ関数だから」
『 static メンバ関数だと普通の関数とほとんど同じだもんね』
「それに仮想関数にできないからオーバーライドもできない」
『……つまり、普通のメンバ関数でこれをやりたい、ってことよね』
「そういうこと！　メンバ関数をウィンドウプロシージャにできれば、そこ
からメンバ変数を使ったりメンバ関数を呼び出すことができるし、
オーバーライドもできるから」
『ポリモーフィズムできる！』
「ってこと。ここからはその方法を説明していきます。さてそのために、
ウィンドウが持っている【 32 ビット整数値】というものを使います」
『…………？』
「ひとつひとつ見ていこうか。まず【 32 ビット整数値】は？」
『 32 ビットサイズの整数値、ってそれってつまり int 型と同じってこと
よね』
「そう、 int や long 、 WPARAM や LPARAM と同じ。このあたりは
Version 5.27 ( No.092 ) や Version 8.17 ( No.159 ) を読み返してみて
ください」
『つまり結局は整数値、ってことね。それをウィンドウが持ってる……？』
「ウィンドウって、元々いろんな情報を持っているよね。たとえばタイトル
とか、ウィンドウスタイルとか」
『あとウィンドウクラス名もウィンドウの情報だし、サイズとか位置とかも
ウィンドウの情報かも。あ、そういうののひとつに、その整数値があるって
こと？』
「そういうこと。今あげた、ウィンドウタイトルとかスタイルとかは、
ウィンドウにとって必要不可欠な情報だけど、そういう情報と一緒に、
好きな整数値をウィンドウに取っておくことができるんです」
『へー、そんなことできるんだ』
「これはプログラムで自由に使うことができます。ただし1つのウィンドウ
につきひとつだけだけどね」
『んー、それは少ないかも』
「でも実は、ひとつあれば十分なんです」
『へ、なんで？』
「たとえば WPARAM や LPARAM 。メッセージって、一緒にこの2つしか送れ
ないけど、それで大丈夫なのはなんでだっけ」
『えっと、確かポインタで……あ』
「そう、 Version 8.18 ( No.160 ) で説明したように、 LPARAM に構造体
やクラスのアドレスを渡しちゃえば」
『どんなに大きな情報も渡せちゃう……それと同じ事ができるんだ！』
「そういうこと。ウィンドウに入れられる整数値は 32 ビット、つまり
アドレスやポインタと同じだから、そこにクラスのアドレスを入れることが
できるんです」
『おお！』
「この仕組みを使って、ウィンドウに送られてきたメッセージを、クラスの
それぞれの変数が持つメンバ関数に送るようにします」
『そんなことできるんだ』
「 MFC はしてるしね」
『そーいえば』
「と、そこまで行く前に、まずこの、ウィンドウが持ってる 32 ビット
整数値っていうのを見ておこうか。まずプログラムを以下のように修正して
ください」

// Dialog.cpp
#include <Windows.h>
#include <stdio.h>
#include "resource.h"
#include "Dialog.h"

// ダイアログプロシージャ。
BOOL CALLBACK CDialog::DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
// （略）
            // それを IDC_E_ANSWER にセットします。
            SetWindowText( hAnswerWnd, pchAnswer );

            // ここから追加。
            // ウィンドウの 32 ビット整数値に計算結果をセットします。
            SetWindowLong( p_hDlgWnd, GWL_USERDATA, iLeft + iRight );
            // ここまで追加。

            return TRUE;
        }
    }
    return FALSE;
}

「つまり IDC_B_EQUAL ボタンを押したときの処理に SetWindowLong() 関数
の呼び出しを追加してください」
『これだけでいいんだ。 SetWindowLong() っていうのが、ウィンドウに
整数値をセットする…… API ？』
「一応それで合ってるけど、 SetWindowLong() の機能はそれだけじゃない
んです」

          セットするウィンドウのウィンドウハンドル    セットする値
                               ↓                         ↓
            SetWindowLong( p_hDlgWnd, GWL_USERDATA, iLeft + iRight );
                                            ↑
                                   セットする値の種類

「この SetWindowLong() 関数は、第2引数で指定した値をセットします。 
GWL_USERDATA を指定すると、さっきから言ってる 32 ビット整数値になり
ます」
『他には？』
「たとえばウィンドウスタイル。 Version 5.24 ( No.089 ) で説明した
ウィンドウスタイルを実行中に変更する時は、この API に GWL_STYLE を
渡すことで変更できます」
『へー、こんな API で変更できるんだ』
「それと、 GetWindowLong() っていう API で、逆にそれぞれの値を取得
できるから。このふたつは、特に MFC を使わない場合は結構使うこと多い
と思うよ」
『 MFC 使わないとこういうののお世話になるってことね……』
「で、話を戻すと、この SetWindowLong() 関数を呼び出して、第2引数に 
GWL_USERDATA を渡すことで、第3引数に渡した値が第1引数で指定した
ウィンドウ、ここではダイアログにセットされるわけです」
『へー。……で、これってそれでどうするの？　確認できないじゃん』
「実はできるんです。ビルドして実行までして」
『ビルドして実行、ほいと』
「次に Spy++ を起動して」
『お、久しぶりね』
「使い方を忘れてたら Version 3.4 ( No.029 ) を参考にしてください。
で、 Spy++ を起動したら、 Ctrl + F を押して」
『ダイアログ出てきた』
「中央の照準みたいなのを、さっき起動した NewCalc アプリのダイアログ
に重ねて」
『ほい、このダイアログのウィンドウハンドルとか表示されたよ』
「 OK ボタンを押すとダイアログのプロパティ、つまり各情報が表示されま
す。この各情報の、【一般】タブの、下から2番目に【ユーザーデータ】って
いう項目があると思います」
『うん、今は 00000000 になってる』
「これが実は、ウィンドウの【 32 ビット整数値】なんです」
『あ、これがそうなんだ！　そか、 Spy++ を使えば見られるってわけね』
「この値は最初は 0 になってます。で、ここでダイアログを使ってみます。
Version 18.02 ( No.389 ) を参考に、 1 + 2 = 3 を計算してみて」
『 1 入力して、 2 入力して、 = ボタン押してと。うん、結果 3 が表示さ
れたよ』
『で、さっきの修正でこの 3 が、ダイアログにセットされたはずです』
『そか、それをさっきの SetWindowLong() 関数でしたんだもんね』
「それを確認してみましょう。先ほどの【ユーザーデータ】が表示されてい
るダイアログで、下にある【最新表示】ボタンを押してください」
『ぽちっと。あ、【ユーザーデータ】が 00000003 になった！！』
「このように、 SetWindowLong() 関数を使うことで、ウィンドウに好きな
値をセットして使うことができるわけです」
『なるほどねー』
「ちなみに、この仕組みは Windows でよく使われています。たとえば
Version 8.12 ( No.154 ) で TVITEM 構造体を紹介しました」
『ツリービューコントロールで使う構造体ね』
「この TVITEM 構造体は lParam メンバ変数を持っていて、これが実は、こ
の構造体で自由に使える 32 ビット整数値なんです」
『あ、さっきのウィンドウのと同じなんだ！』
「こんなふうに、 Windows システム内のオブジェクト、つまりウィンドウ
やこのツリービューコントロールのアイテムといったものは、たいがい
〈自由に使える 32 ビット整数値〉を持っているので」
『それをうまく使えば、それぞれにいろんな情報持たせることができる！』
「ということ。これをうまく使えるといろんなことができるから憶えておい
て。さて、では最後に、これをどう使って、メッセージを普通のメンバ関数
で受け取るようにするのか説明します」
『おー』
「これまでの方法は、ウィンドウとウィンドウプロシージャが以下のような
関係になっていました」

┌───────────┐  ┌───────────────┐
│  ウィンドウ          │  │  ウィンドウプロシージャ      │
│                      │  │  (普通の関数 or              │
│  ※イベント発生！※→→→│   static メンバ関数)         │
└───────────┘  └───────────────┘

「で、このままウィンドウプロシージャ内で処理をしていたわけだけど、
これだと普通の関数や static メンバ関数だから、情報が増えるとそれだけ
グローバル変数が増えていくから大変です」

┌───────────┐  ┌───────────────┐
│  ウィンドウ          │  │  ウィンドウプロシージャ      │
│                      │  │  (普通の関数 or              │
│  ※イベント発生！※→→→│   static メンバ関数)         │
└───────────┘  └────↓──────────┘
┌──────────────────↓──────┐
│  グローバル変数                    ↓            │
│  ┌────────────────────┐    │
│  │ ウィンドウに結びつけられた変数         │    │
│  └────────────────────┘    │
└─────────────────────────┘

「このグローバル変数は、情報が増えたり、ウィンドウが増えたり、
ウィンドウプロシージャが増えたりすると管理がすごく大変になります」
『？　ウィンドウとウィンドウプロシージャって分けて考えるものなの？』
「もちろん、 Version 5.23 ( No.088 ) を思い出して、
ウィンドウプロシージャはウィンドウクラスを登録しなきゃ使えないでしょ、
だからウィンドウを作るたびにほいほい作れるものじゃないんです」
『そういえばそうだね……ってことは、同じ種類のウィンドウをいっぱい
作っても、ひとつのウィンドウプロシージャでメッセージ受け取らなきゃ
いけないの？　それって大変じゃない？』
「大変です。さっきの図で言えばこうなります」

┌───────────┐
│  ウィンドウ1         │
│                      │      ┌──────────────┐
│  ※イベント発生！※→→→→→│  ウィンドウプロシージャ    │
└───────────┘      │  (普通の関数 or            │
┌───────────┐  →→│   static メンバ関数)       │
│  ウィンドウ2         │ ↑   └────↓─────────┘
│                      │ ↑             ↓
│  ※イベント発生！※→→→              ↓
└───────────┘                ↓
┌────────────────────↓──────┐
│  グローバル変数                        ↓            │
│  ┌───────────┐┌───────────┐│
│  │ ウィンドウ1の変数    ││ ウィンドウ2の変数    ││
│  └───────────┘└───────────┘│
└───────────────────────────┘

「こういった変数を、ウィンドウハンドルで区別して使い分ける必要がある
わけです」
『うわ、面倒そう！』
「というわけで次回に続く！」

/*
    Preview Next Story!
*/
『ウィンドウにこんな微妙な機能があったとは』
「微妙じゃないよ、いろんな使い道があるんだから」
『たとえば？』
「ポインタ入れてクラスと結びつけたり」
『他には？』
「……ポインタ入れて構造体と結びつけたり」
『…………』
「というわけで次回」
＜ Version 18.05 ウィンドウプロシージャをメンバ関数にする！ ＞
『につづく！』
「というわけでポインタは万能なんです！」
『話すり替わってる！』


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/index.html
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

