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

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

    送信日： 1999/07/05(Mon) No.014
    配信数： 2290（ Mag2 + Pubzine ）
    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/

/*            １９９９年７月５日（月）の更新                */

・表紙を７月バージョンに！！
　というわけでMaking of "9907.jpg"で紹介している「７月表紙イラスト」
を掲載しました。出来は……うーん、７５点くらいかなぁ（汗）。この絵の
解説はチョー７月４日をご覧ください。
　あと、このイラストには「日焼けバージョン」が存在します。見てみたい
という方はＣＧギャラリーへとどうぞ。
 
・Making of "9907.jpg"最終回！
　来月表紙の作成過程をつづるMaking of "9907.jpg"も最終回！
　「キャラ」と「合成・仕上げ」の２ページを追加しました。完成した絵は
あんまです（汗）が、その工程は結構参考になる部分あるんじゃないか
なーと。



/*                チョー普通な日記                */

１９９９年６月２７日（日）：
　ビデオデッキを移動したりドラフトをダウンロードしたり。そしてなぜか
チョー普通な日記でプログラミングの話題が盛り上がる！！

１９９９年６月２８日（月）：
　コミケにまだ行ったことないという話。そして昨日に引き続き熱い討論が
繰り返されてるのだよええっ！？　内容はやっぱプログラミング。なぜこれ
をかなゆ〜でしないかな……。というわけでプログラマーのみんなはこっち
の日記も要チェックや！

１９９９年６月２９日（火）：
　某パン屋って知ってる？　作者は某パン屋の社長のせがれなのだ。それだ
け。あと貯まってたビデオを見たり。

１９９９年６月３０日（水）：
　istream_iterator の話やまぐまぐのランキングの話やベクターのダウン
ロード数の話やタブレットの話や shade の話など、その多芸多趣味っぷり
が強烈に分かる１日なのだよ。

１９９９年７月１日（木）：
　キョロちゃんすげぇ。とにかく見れ。あと新聞問題とハト問題とインサイ
ドウィンドウズの休刊。わてはＩＷに勝ったのか！？

１９９９年７月２日（金）：
　金曜だからやっぱりアニメ見たり。

１９９９年７月３日（土）：
　部屋の片付けとホームページの更新の準備をバリバリしたという話。あと
ダメ過ぎな話とか。どれくらいダメ過ぎかはやっぱ見てみないと。ふぅ。


/*                    金菜さんの憂鬱                        */


１９９９年６月２７日（日）：
今日から const メンバ関数の座講を連載
サンプルコード
メンバ関数への const の付け方
const メンバ関数の中ではメンバ変数を書き換えられない
使う理由はふたつ
メンバ変数の変更を防ぐため
メンバ関数を使う側に安心感を与えるため
要するに「制限事項」を与えるシステム

１９９９年６月２８日（月）：
お便りｘ４
お便り
プロパティシートをコンポーネントとして追加したがうまくいかない
Ｃｏｄｉａｎを参考にしてね
お便り
CommConfigDialog() ダイアログをプロパティシートに貼り付けたい
かなり難しそう
隠して利用する
お便り
ネットワークドライブの接続方法
お便り
Unicode/Shift−JIS変換について
Ｃランタイムとマクロがある
動的にポインタを返すけど自動的に削除される

１９９９年６月２９日（火）：
const メンバ関数
const クラス型の変数は自クラスが持つメンバ関数の中から 
　const メンバ関数しか呼び出せない
サンプルコード
ライブラリに const メンバ関数がないと const なポインタや参照を
　使用できない
お便り
ＤＬＬとスタイル
スタイルやメッセージなら無視されるだけ
ターゲットに合わせて変えるのがいい

１９９９年６月３０日（水）：
お便りｘ２
const メンバ関数
const メンバ関数の中から自クラスのメンバ関数を呼び出すときには、
　const なメンバ関数しか呼び出せない
サンプルコード
これはかなり強い制限
見返りはとても大きい
デバッグや保守にとても役立つはず
お便り
プロパティシートの問題は解決
お便り
CFormView とスクロールバー
１９９９年５月２４日のものと同じ

１９９９年７月１日（木）：
const メンバ関数
const メンバ関数の中から自クラスのメンバ変数のメンバ関数を呼び出す
　ときには、const なメンバ関数しか呼び出せない
サンプルコード
メンバ変数へのポインタや参照を返すようなメンバ関数
サンプルコード
文法としても概念としても違反

１９９９年７月２日（金）：
const メンバ関数
戻り値しか違わないオーバーロードはエラー
サンプルコード
const と非 const でオーバーロードできる
サンプルコード
戻り値ナシ、引数ナシ、でもオーバーロードできる
お便り・前半
ＡＰＩの乗っ取り
wbstombs(), mbstowbs() は setlocale() が必要
お便り・後半
無制限引数で関数ポインタを操作
誤字
far/near
Mutex の語源
コンソールアプリでもＡＰＩは使える

１９９９年７月３日（土）：
const メンバ関数
const と非 const でオーバーロード
サンプルコード
呼び出せるのはどっちか
サンプルコード
const と非 const は一意に決定され、選択できない
中の動作を変えてはいけない
無理矢理のオーバーロードは絶対にダメ


/*                    #pragma twice                        */

　Version 2.3
変数の中を見よう！

「ではこの前の続きとして、変数の中を見ていきましょー」
『はーい』
「と、その前に！！」
『な、なに？』
「今回は変数の中身を見る方法を、みっつ、紹介します」
『へー、色々とあるんだー』
「そういうこと。で、とりあえず＜仕組み＞は考えないで、使い方だけ憶え
てもらいたいなと思ってます」
『要するに道具としてのみ、ってことよね』
「そゆこと。じゃ、とりあえずこの前のプログラム」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
}

「この関数の閉じカッコをクリックして、この前の＜手のひら＞アイコンを
クリックして」
『あのプログラム止めちゃうヤツよね』
「そ。ちなみにこの●が付いた行を＜ブレークポイント＞っていいます」
『コーヒーブレイク、みたいな？』
「そだね」
　"}" の左に "●" が表示される。
「そのあとどうするか憶えてる？」
『もっちろん！！』
　マウスカーソルが＜紙に書かれた文章、右に下向き矢印＞をクリックす
る。プログラムが実行され、ダイアログが表示される。そして、貼り付けて
ある【＝】ボタンをクリックする。先ほどの "●" の中に黄色い矢印が表示
される。
「じゃ、メニューの【表示】−【デバッグウィンドウ】−【変数】を選んで
みて」
『ツールバーだと？』
「＜ウィンドウの手前に赤と青の立方体がＶ字フォーメーション＞みたいな」
　というアイコンを左クリックする。新たにウィンドウが開く。上に＜コン
テキスト＞、中に＜シンボル名＞と＜値＞の表に "this" や "iBox" が、下
には＜自動＞＜ローカル＞＜ this ＞のタブがある。今は＜ローカル＞が選
択されている。
『あ！　この "iBox" ってこの＜変数＞のことよね。ってことはその右の
＜値＞には……あれ？』
　＜シンボル名＞ "iBox" の右、＜値＞には "0x00000064" と表示されてい
る。
「これはね、この上で右クリックメニューを出して＜１６進表示＞のチェッ
クをオフにすれば大丈夫だよ」
『じゃーしてみるね』
　"iBox" の上で右クリックし、メニューを表示させる。＜１６進表示＞の
左にチェックが入っている。この項目をクリックすると、 "iBox" の右が
"100" になる。
『あ、１００！　へー、こうすると変数の中身が見られるんだー』
「そういうこと。ちょっとしつこいけど、もう少し見てみようか」
『見てみるって？』
「１００を他の数字に変えてみるとかね。＜実行＞アイコンをもう一度押し
てみて」
　＜紙に書かれた文章、右に下向き矢印＞の、アイコン、【実行】ボタンが
クリックされると再び "Calc" ダイアログが表示される。
「で、このダイアログも閉じてから、数字を変えてみようか」
『はーい』
　【キャンセル】ボタンが押され、ダイアログが閉じる。ＶＣを表示させ、
"100" の部分を "10000" に変える。
『で、ビルドして実行すればいいんだよね』
「もちろん」
　ツールバーの【ビルド】ボタンを押し、現れたウィンドウに＜エラー 0、
警告 0＞が表示されてから【実行】ボタンを押す。"Calc" ダイアログが表
示され、さらに【＝】ボタンを押すとＶＣが表示され、先ほどの "iBox" の
欄には "10000" が表示されている。
『うん、やっぱちゃんと変わってるね』
「じゃあさ、数字入れなかったら変数の中、どうなってると思う？」
『とりあえず試してみちゃうね』
　
//    iBox = 10000;

　とコメントアウトし、再びビルド、実行する。"iBox" の中身は-858993460
と表示される。
『なんか変な数が入ってるね』
「そういうこと。だから、変数を作ったらまずなにか数字を入れないと、使
えないってこと」
『え〜？　ゼロが入ってるんだと思ってたんだけどなー、めんどそー』
「ま、それは言えるかな。逆に言えば、そういう部分もプログラマーが自由
にできるってことなんだけどね」
『ふーん。ねー、めんどいって言えばさー、いちいち止めて見るのって面倒
だけど。止めずに変数の中身見る方法、あるんでしょ？』
「もちろん。これが一番簡単かな」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    TRACE( "%d\n", iBox );
}

『ふみぃ！？　またプログラむー、またわけわかんないのー』
「言ったでしょ、道具として使うから仕組みはまたあとで、ってね。ま、と
りあえずビルドしてみ？」
『はぁい』
　ビルドし実行する。何も起こらない。
『あのー……』
「ちゃんと出てるよ。ほら、ここ」
　マウスカーソルがくるくる回る。下に【ビルド】や【デバッグ】などのタ
ブがあるウィンドウに、確かに "100" という数字が書かれている。
『あ、ホントだ、こんなところに。あれ、でもこれって確か……』
「このウィンドウは＜アウトプット＞って言って、いろんな結果が表示され
るウィンドウ。たとえば……」
　下のタブから【ビルド】を選ぶと、ビルドしたときに表示された＜Calc.exe
 - エラー 0、警告 0＞などの文が表示される。
「このビルドの結果も、アウトプットウィンドウに表示されてたんだよ」
『へー。じゃーさっきの……確か【デバッグ】タブだったよね』
　【デバッグ】のタブを選ぶと、

'C:\WINDOWS\SYSTEM\MFCO42D.DLL' のシンボルを読み込みました

という文が並び、最後の方に "100" という数字が書かれている。
「そう。この "TRACE()" っていうのは、この部分に書き込む関数……」
『関数……？』
「みたいなもの」
『何その曖昧なの』
「ま、今は関数と思って間違いないかな」
『ってことは、この "TRACE()" っていう関数を呼んで、このところに数字
書き込んで、そしたら戻ってくる、ってこと』
「そういうこと。もうちょっとこの "TRACE()" の使い方勉強してみようか。
たとえば……」

void CCalcDlg::OnBEqual() 
{
    TRACE( "あかさたな\n" );
}

「こうすると、＜あかさたな＞って書き込まれるよ」
『このまえの "MessageBox()" に似てるね。でさ、最後の "\n" って何？』
「取ってみたら？」
『はーい』

    TRACE( "あかさたな" );

　でビルドする。実行すると、

あかさたなスレッド 0xFF055839 終了、終了コード 0 (0x0)。

　と表示される。
『なーんだ、改行って意味なんだ』
「そういうこと。さて問題！」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    TRACE( "iBox\n" );
}

「はどう表示される？」
『 "iBox" 、でしょ』
「ギク、なんで？」
『考えたんだけどさ、このまえ＜普通の日本語はプログラムの中にあっちゃ
ダメ＞って言ってたじゃない。でも【 " （ダブルクォーテーション）】で
囲むと大丈夫じゃない。ってことは、この中ってプログラムとちょっと違う
んじゃない？』
「げ、その通り。この 【 " 】で囲むと、その中は＜文字列＞って見なされ
るから、変数とは関係なくなるんだよね」
『文字列？』
「そ。これはまた今度かな。じゃ、次の問題。 "iBox : 100" って表示させ
たいときは？　あ、"100" っていうのはもちろん」
『変数 "iBox" の中身、でしょ？　私水希ちゃんみたいなズルしないもーん』
「はいはい」
『……ちょっと試してみていい？』
「もちろん」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    TRACE( "iBox : \n", iBox );
}

　と書き換えてからビルドする。実行するが "iBox : " としか表示されな
い。
「ってことは？」
『ってことは、やっぱ "%d" ってことよねー』
「そういうことだね」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    TRACE( "iBox : %d\n", iBox );
}

　でビルドし実行。今度は "iBox : 100" と表示される。
『ふーん、この "%d" っていうのが＜あとにある "iBox" の中身を表示しま
すよ＞ってことなんだ』
「そういうこと。で、この変数はいっぱい指定できるから、こんなこともで
きます」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    int iBox2;
    iBox2 = 200;
    TRACE( "iBox : %d, iBox2 : %d\n", iBox, iBox2 );
    //  iBox : 100, iBox2 : 200
}

『へー、最初の "%d" が "iBox" ので、次の "%d" が "iBox2" の、ってこ
となんだ。でもさ、これ、分かりにくいよね。なんか暗号みたいだし』
「そういえばそんな感じかも……」
『他の方法ってないの？』
「あるよ。たとえばね……」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    CString cStr;
    cStr.Format( "iBox : %d\n", iBox );
    MessageBox( cStr );
}

「とりあえず試してみ？」
『はーい』
　ビルドして実行し、【＝】ボタンを押す。ダイアログが表示され、そこに
は "iBox : 100" と表示される。
『最後の "MessageBox" っていうの、確かダイアログ表示する関数、だった
よね。でも、あのときは " 1 + 2 = 3 " っていうのを渡してたよね』
「そう。つまり、 cStr が " 1 + 2 = 3 " の代わりになってる、ってことだ
ね」
『えっと、たぶん…… cStr って、変数？』
「そう。この "CString" っていうのは、文字列を入れる変数を作るんだよ」
『ってことは、文字列を作る箱、その名はしーえすてぃーあーるぅ！！　み
たいな？』
「そゆこと」
『でもそのあとの１行がよく分かんない〜』
「小カッコの中身は分かるでしょ？」
『うん、さっきの TRACE() っていうのと一緒だよね。このときみたいに、
%d の中に iBox の中身入れて……？』
「そうだね、まず、この Format() っていうのは、関数の一種」
『へ〜』
「ま、小カッコが付いてたら関数、って思っていいかな」
『そういえば、 MessageBox も、 TRACE も、この Format も……って、も
しかして水希ちゃん、だから Format() って小カッコ付けて言ってるの？』
「うん、こうやって付けておけば、それが変数か関数か分かるでしょ？」
『まーね』
「で、この関数は CString が持ってる関数なんだわ」
『？　関数を持ってるの？　じゃー int もなんか関数持ってるの？』
「あいにく持ってないんだよねー。持ってるのと持ってないのがある、って
ところかな」
『ふーん』
「で、この＜持ってる関数＞を使いたいときには、」

    変数.関数();

「ってします」
『真ん中の点は？』
「これはピリオド。これは＜の＞って考えるといいかな」
『の？』
「そ。たとえば＜ cStr の Format() っていう関数を使います＞みたいにね」
『え〜？　＜ CString の Format() っていう関数を使います＞じゃない
の？ 』
「じゃ、これを試してみようか」

void CCalcDlg::OnBEqual() 
{
    int iBox;
    iBox = 100;
    CString cStr;
    cStr.Format( "iBox : %d\n", iBox );
    CString cStr2;
    cStr2.Format( "%d in iBox\n", iBox );
    MessageBox( cStr );
    MessageBox( cStr2 );
}

『えっと、ビルド、実行と』
　ダイアログが２度表示される。１度目は "iBox : 100" 、２度目は "100
in iBox"。
「もう分かってると思うけど、 Format() っていう関数、 TRACE() のとき
みたいには %d の中に iBox の中身を入れたあと、それを cStr の中に入れ
てくれるんだけど……」
『つまり、 cStr と cStr2 には別の文が入るわけだから、 cStr.Format()
って形にしないといけない、 CString.Format() じゃダメってことね』
「そういうことだね。こういう関数を使うと、変数を操作できるってこと」
『こういうのも、道具のひとつってこと？』
「そういうこと」
『でも、こういうの憶えてくのなんか大変。今回のだけでも、憶えられるか
どーかちょっと不安……』
「大丈夫だよ、当分新しく憶えないから」
『ホント？』
「ホント。実際、これだけのこといっぺんに憶えるのは大変だと思うから、
分かんなくても心配しなくていいよ」
『そういうもんなの？』
「そういうもの」


/*
    Preview Next Story!
*/
『今日はなんか、頭がウニになっちゃいそう……』
「ま、ちょっと先見過ぎた感じかな」
『じゃ、今度はもうちょっと簡単なの？』
「たぶんね……」
『というわけで次回』
＜ Version 2.4 計算をしてみよう！！ ＞
「につづく！！」
『ねーはっきし言ってあたしものすごーく不安なんだけど』
「大丈夫だよ、少しずつ憶えてけばいいんだから」
『じゃなくて、購読登録数減っちゃうんじゃないかって』
「う”、確かに……」


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

・メニューバーを統一。
　今のところ、前のメニューバーと比べて特に問題がないということみたい
なので、現在のメニューバーをすべてのページに使用します。来週の更新は
これだけ（汗）。とりあえずテストとかあるんで７月いっぱいは更新量減る
んじゃないかな、と。


/*                        ご注意！！                        */
/*

　このメールマガジンをそのまま「返信」すると、作者のメールアドレス
（kab-studio@multimedia.design.co.jp）へと転送される仕組みになってい
ます。「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」の管理者へメールを送りた
い場合には、直接そちらへメールを送ってください。

*/
/*

　このメールマガジンの購読登録を解除する場合には

http://www2.justnet.ne.jp/~kabstudio/Info/MailMagazine/

　が便利です。また、購読解除についての詳しい情報は、
登録時に送られてきた「まぐまぐ」もしくは「Ｐｕｂｚｉｎｅ」からの
メールをお読みください。

*/
/*

　本誌のバックナンバーはＫＡＢ−ｓｔｕｄｉｏにはありません。
　まぐまぐの

http://bigbeat.tegami.com/~mgsearch/frame.cgi?id=0000012198

　にありますのでそちらをどうぞ。

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

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


/*                    See you next week!!                    */


