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

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

    送信日： 2000/01/24(Mon) No.041
    配信数： 3370（ Mag2 + Pubzine ）
＊    発行元： まぐまぐ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine( URL: http://www.pubzine.com/  ID: 590 )
*/


/*                    今週の「どう？」（最終回）                  */

『とゆーわけで、このコーナーもこれが最期！』
「ま、最近全然送られてこないからね、しょうがないかも」
『じゃー、なんか〈何ぶっこいてんだコイツ〉とか思ったらどうすればいい
の？』
「日記とか鏑矢の憂鬱とかに送ればいいんじゃないかな」
『そっちの方が確実かもね』
「と、いうわけでこのコーナーはとりあえず終了」
『んじゃ、ぷらとわであおーね！』

[チョー普通な日記]
http://www2.justnet.ne.jp/~kabstudio/nikki2/
[鏑矢の憂鬱]
http://www2.justnet.ne.jp/~kabstudio/Programing/KabuU/


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

・更新ナシ。
　今週はとくにナシ。ま、辞書の追加単語がかなりあるからそれで我慢して
ね。


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

２０００年１月１６日（日）：
　武双山VS貴乃花、その死闘。

２０００年１月１７日（月）：
　本を取り寄せたりアプリの振込をしたりとお金出てくなーとゆー話。あず
まんがはちゃんと届くかのぉ。

２０００年１月１８日（火）：
　イラスト描き。イラストに必要な時間と技術を金で買うかどうか。時間か
なりやばいかも……。

２０００年１月１９日（水）：
　特にナシ(笑)。珍しく書くネタがなかったなー。

２０００年１月２０日（木）：
　アウトトリガー略してあうとりの話。このゲームに対するはまりっぷりは
すさまじいです。家でネットワークを介してできるようになったら楽しいだ
ろうなー。

２０００年１月２１日（金）：
　久々のアニメ色々。そして fj.comp.oops の話。フレーミングは簡単に起
きるものなんです。

２０００年１月２２日（土）：
　卒業研究ガイダンス。うーむ、これから数週間、えらい大変そう……。


/*                         鏑矢の憂鬱                             */
http://www2.justnet.ne.jp/~kabstudio/Programing/KabuU/

２０００年１月１６日（日）：
お休み

２０００年１月１７日（月）：
お便り
ホイールマウスについて
ロジテックのだとうまくいかない
ドライバの関係かも
WM_VSCROLL とかについても調べてみるといいかも

２０００年１月１８日（火）：
お便り
曲線の描画
PolyBezier()
Singleton
インスタンスの個数
サンプルコード
参照カウント
サンプルコード
関数テンプレートを使った実装
コンストラクタを private に

２０００年１月１９日（水）：
「えぴすてーめーのオブジェクト指向的日常」について

２０００年１月２０日（木）：
プログラミング辞書が盛況。

２０００年１月２１日（金）：
お便り
Singletonの実装方法
COM インターフェイス
CallBack 関数の作り方
生成用関数のラッパー
「コールバック」は「折り返し」
サンプルコード
EnumWindows() の例
戻り値と引数、 CALLBACK があってればいい

２０００年１月２２日（土）：
お便り
昨日の CallBack クラスのサンプルコードは Observer パターンでは？
ガンマパターンのひとつ
「ガンマパターン」とは
「オブジェクト指向における再利用のためのデザインパターン」のこと
知らなくてもいい？


/*                       今週の追加単語                           */
http://www2.justnet.ne.jp/~kabstudio/Programing/Dictionary/

・追加単語：
呼び出し規約 __cdecl __stdcall __fastcall char CGI
インクルード make makefile オブジェクト指向設計
オブジェクト指向プログラミング言語 関連 集約 コンポジション 委譲 

・更改単語：
オブジェクト クラス オブジェクト指向 オブジェクト指向プログラミング

・今週のごめんなさい
LPARAM オーバーライド コンポーネント インスタンス
リアル インデックス化


　うお、すごい数だ……。いやー、悪い癖が出て、こちら側でかなり単語を
追加しちゃいましたからねぇ。来週はちょっと自重しよう……。


/*                       #pragma twice                            */
http://www2.justnet.ne.jp/~kabstudio/Programing/PragmaTwice/

　Version 3.16
String と Version


「今回は、残ってるふたつのリソース、 String Table と Version について
見てみることにしましょう」
『リソースって結構種類あるよねー』
「んじゃまずは String Table から」
『えっと、ワークスペースの ResourceView の String Table をダブルクリ
ック！』
　リストが表示される。一番左に【ID】、中央に【値】、右に【キャプショ
ン】。その下にひとつだけデータがある。 IDS_ABOUTBOX 101 Calc のバー
ジョン情報。
『なにこれ』
「実は火美ちゃんは一度この〈Calc のバージョン情報〉って文字を見たこ
とがあるはずなんだけど」
『えー？　ちょっとまって今記憶に検索掛けるから』
「便利やね……」
『あ！』
　Calc を実行させ、 Calc ダイアログ左上のアイコンを左クリックする。
そのメニューの最後に【Calc のバージョン情報】と書かれてる。
『これ！？』
「当たり！　試しにこの文字列変えてみ？」
『？？』
「とりあえず Calc ダイアログを閉じて、さっきの String Table を表示さ
せて、 IDS_ABOUTBOX を右クリック、メニューから【プロパティ】を選んで」
『なんだいつものヤツねー。あ、ダイアログ出たよ、エディットボックスの
ときとかのと似たの。ちゃんと【キャプション】のとこに〈Calc のバージョ
ン情報〉って書いてある』
「これを好きなように書き換えて」
『んじゃ〈バージョン情報じゃ！〉にして、ビルドして実行して右クリック
メニュー！　うん、メニューの最後が【バージョン情報じゃ！】になった！』
「というわけで、 String Table リソースには、文字列を格納することがで
きます」
『メニュー用の？』
「ううん、基本的に自由に使えるから。えっと、 CalcDlg.cpp に
CCalcDlg::OnInitDialog() メンバ関数の定義があるでしょ」
『あ、 SetIcon() とか使ってアイコンセットしたのだよね。ファイルビュー
で CalcDlg.cpp 選んで、うんあったよ』
「その中で……」

    strAboutMenu.LoadString(IDS_ABOUTBOX);

『 IDS_ABOUTBOX って〈Calc のバージョン情報〉の ID だったよね。で、
Load なんたらって関数ってことは、アイコンみたいに String Table の文
字列もロードできるってことなんだ』
「そういうこと。ま、実際に使うには文字列ってものがもっとよく分かんな
いと無理だからそれはまた今度ね」
『 うん、なんか難かしそ……。でもさ、文字列を String Table ってのに
置くのって意味あんの？　ダイアログの名前変えた時みたいに、文字列をプ
ログラムの中に直接書き込めばいいじゃない』
「もちろんそれだけのメリットがあるから。まず、String Table に文字列
を全部まとめておくと、修正が楽」
『どゆこと？』
「プログラムに直接書き込むと〈どこにどの文字列を書いたのか〉探すのが
面倒ってことだね」
『そういえば、あのときはボタンを押したときのメンバ関数に書き込んだん
だもんね。そーゆーの憶えてないといけないのは面倒かも』
「ふたつめは、書き換えたあとビルドするのが楽」
『これはホントそう思う！　リソースだけ書き換えてビルドしても、すぐ終
わるんだもん。これはいーよねー』
「みっつめは言語の問題」
『言語？』
「リソースビューの【String Table】のプロパティを見て」
『はーい。あ、【言語：日本語】だって』
「実は、同時に複数の言語のリソースを含めることができるんだよね。日本
語のダイアログと英語のダイアログとか」
『【String Table】も英語と日本語みたいにできるの？』
「もちろん。で、これはウィンドウズの設定で自動的に切り替わるようにな
ってるから」
『つまり、リソースに文字列を入れておくと、いろんな言語に対応するのが
楽ってことねー』
「そういうこと。ま、今は重要じゃないけどね」
『そりゃ英語版出す気はないけど……』
「さて、今度は〈バージョン情報〉について見てみましょう。【ダイアログ】
の IDD_ABOUTBOX を開いてみて」
『これってさっきの〈Calc のバージョン情報〉を選んだら出てくるのだよね』
「そうそう。このダイアログは、ユーザーに〈このアプリの名前、バージョ
ン、著作権〉を知らせるためのもの」
『〈アプリの名前〉はいいけど……』
「バージョンはねぇ、〈どれだけ新しくしたか〉の目安になる数字。アプリ
を一度リリースしたあと、ミスとかが見つかって直して、それをまたリリー
スするときには、このバージョンの数字を少し増やして出す」
『あー、そーゆーのそういえばアプリであるよね』
「たとえば今使ってるこの Visual C++ のバージョンは 6.0 。つまり単純
計算だと６回手が入れられてるってことだね」
『これが、このダイアログに書かれてる 1.0 ってゆーののこと？』
「そう。バージョンの付け方は結構自由に付けられるから、こうでなくても
いいけどね」
『たとえば？』
「たとえば、最初にリリースするのが機能の全然ないのなら〈これからどん
どん新しくする〉って意味で 0.01 ってバージョンにするとか」
『じゃあ 100 とか 10000 とかから始めてもいいの？』
「いや、まぁ、確かに悪くはないかなぁ……」
『……でもやめた方がいいってことね。〈著作権〉は？』
「これは誰が作ったか。 Copyright (C) 1999 のあとに名前を書き込めば
〈このアプリケーションを配布したり改変したりする権利はこの名前の人物
にある〉って意味になるから」
『そういえばテレビとか雑誌でもよく見るよね、この Copyright って』
「そうそう。勝手に売られたりしないように、ちゃんと書かないとね」
『あたしだったら〈 Copyright (C) 1999 火美ちゃん〉みたいに？』
「あ、名前は英語の方がいいかな、世界共通ってことでね」
『そういえば、コミックスの最後に載ってる〈著者〉ってローマ字でも書い
てあるもんね。 1999 って１９９９年ってことだよね。これ 2000 にしなく
ていいの？』
「もちろんするよ。この数字はプロジェクトを作った年が書かれてるだけだ
から。この年数は、アプリケーションをリリースした年にしないとね」
『誰もまさかこんな時間がかかるとは思わなかったもんね〜』
「う”」
『あとアイコン、 IDR_MAINFRAME のだよね』
「そ。このダイアログに張り付いてるののプロパティで、どのアイコンを表
示するか決められるから」
『バージョン情報ダイアログってこれだけでいーの？』
「基本的にはね。ただ、最近はホームページアドレスやメールアドレスも載
せることが多いかな」
『アニメーションしたりするのもあるよね』
「ま、それはＣＤ−ＲＯＭとかで提供できないとね。本体よりバージョン情
報の方がファイルサイズ大きいってなったら」
『うわーそれやだ』
「じゃ、最後にもうひとつのバージョン情報」
『もうひとつ？』
「んーと、ウィンドウズフォルダを、フォルダかエクスプローラーで開いて
みて」
『はーい。Ｃドライブ、 Windows っと。で？』
「そのなかに Notepad.exe ってファイルあるでしょ。とりあえずダブルクリ
ックしてみて」
『って、これってメモ帳だよね……うん、メモ帳だよ』
「んじゃ閉じて、今度はそのファイルのプロパティを開いて」
『右クリックメニューの【プロパティ】っと。ダイアログ出た……あ、【バー
ジョン情報】のページがある！』
「実行ファイルや DLL にはたいがいこれが付いてるから」
『へー、知らなかったなー。これにもバージョン情報とか、著作権とか書い
てあるんだね。あと会社名とかいろいろ……』
「ある意味、さっきのバージョン情報ダイアログよりもこっちの方が大事か
な」
『そりゃ、さっきのは実行しなきゃわかんないもんね』
「じゃ、 Calc アプリケーションでもこのバージョン情報を作ってみましょ
う」
『って、それがリソースにある VS_VERSION_INFO ってのでしょ？』
「そういうこと」
『じゃダブルクリック！』
　リストが表示される。左に【キー】、右に【値】。左の列には英単語が並
ぶ。中央に【日本語(041104b0)】という仕切線。
『う”、難しそう』
「あ、書いてあるのは、さっき見たメモ帳のプロパティなんかと同じなんだ
から」
『そういえばあっちは日本語で書いてあったよね』
「そうでしょ。ま、ひとつずつ見ていこうか。まず FILEVERSION はファイ
ルのバージョン。これがファイルのプロパティの最初に書いてあった数字」
『なんか 1, 0, 0, 1 って無茶苦茶細かくない？』
「これもさっきのバージョン情報ダイアログと同じで、自由に変えていいか
ら。メモ帳だって違うし」
『メモ帳ってもしかして日付……？』
「ま、テストバージョンの場合には、これだけ桁があると便利だけどね」
『アルファとかベータととかってことね』
「そゆこと。次の PRODUCTVERSION は【製品バージョン】」
『ってどう違うの？』
「ひとつの製品にいろんなファイルがある場合とかは、製品のと各ファイル
のとでバージョンが違う時があるから」
『あ、なるほど。でも Calc みたいにひとつだけなら一緒でいいんだよね』
「もちろん。 FILEFLAGSMASK 、 FILEFLAGS 、 FILEOS 、 FILETYPE 、 
FILESUBTYPE はそのままでいいから」
『ちなみにどういう意味？』
「このアプリはウィンドウズ用アプリですよーとか」
『そりゃまぁそんなふうなことは書いてあるけど……』
「んじゃそのあとの【日本語】のとこ」
『ってことはいろんな言語のバージョン情報も作れるんだ』
「そういうこと。ま、日本だけで公開するなら」
『日本語版だけでいいってことね。 Comments は？』
「【コメント】。ようするに〈このアプリはどういう意味〉とかってことを
書くわけ」
『まんまね……』
「ま、空白でいいかな。空白にすれば、ファイルのプロパティにも表示され
ないし」
『 CompanyName は【会社名】だよね。これは書かなきゃいけないっぽいけど』
「そう、これはちゃんと書かなきゃダメ。会社じゃなくてもブランド名とか、
なんか書いとかないと。 FileDescription は、ファイルのプロパティの２行
目、【説明】の部分」
『つまりこのファイルがなんなのか書けばいいんだよね』
「そういうこと。〈詳しいアプリケーション名〉ってとこかな。 FileVersion
はファイルのバージョンはそのまま」
『え、なんで？』
「これはさっきの FILEVERSION がそのまま表示されてるから」
『あ、いっしょなのね』
「 InternalName は、ファイル名から拡張子を取り除いたの」
『だから Calc って書いてあるのねー』
「 LegalCopyright は【著作権】、ファイルのプロパティの３行目に書かれ
てたの」
『つまり大事ってことね。これはバージョン情報ダイアログのと同じでいい
んでしょ？』
「うん、そうしとかないとまずいかも。 LegalCopyright は【商標】」
【 TM ってのだよね。フリーウェアなら必要ないでしょ？】
「ま、そういうことだね。市販のはたいがい書いてあるけど」
『 OriginalFilename は【正式ファイル名】だね。これはこのまま Calc.EXE
で良さそう』
「うん、いいでしょ。 PrivateBuild は【プライベート ビルド情報】。テス
トバージョンとか、社内専用バージョンとかってことを書くとこかな」
『 ProductName は【製品名】にあたるんだよね』
「そう。これは、ファイル単体のじゃなくて、アプリケーションパッケージ
全体の名前ね」
『だから Notepad.exe のは Microsoft(R) Windows(R) Operating System 
って書いてあるんだ。メモ帳はウィンドウズの一部だもんねぇ』
「 ProductVersion はこのままでＯＫ」
『あ、これもさっきの PRODUCTVERSION とリンクしてるんだ』
「そういうこと。最後の SpecialBuild は PrivateBuild とほとんど同じ意
味だね」
『このふたつは空白のままでいいんでしょ？』
「いいでしょ。と、こんな感じかな。ちなみに詳しいことは、ＭＳＤＮの中
の VERSIONINFO Resource ってページに書いてあるから」
『なんだ、公式ドキュメントがあるんだ……えいごー！？』

/*
    Preview Next Story!
*/
「ってゆーか、火美ちゃんは英語読めないの？」
『読めるよ。英語自然文翻訳システムの解凍に５Ｇ必要だけど』
「ＨＤ増設しなきゃね……」
『というわけで次回』
＜ Version 3.17 ダイアログの閉じ方 ＞
「につづく！！」
『あとなんか解凍しといたほうがいいのあるかな』
「日本語自然文翻訳システムも解凍しとけば？」
『……ちょっとそれどーゆー意味よ』


/*                       金菜さんの憂鬱                           */
http://www2.justnet.ne.jp/~kabstudio/Programing/KanaU/

アプリのツボ
#05 ファイラー その１

　エディタとは逆に、ファイラーの需要は最近落ちてるみたい。古い、非
GUI 系 OS はファイル操作にコマンドを使っていたから、その分需要が高
かったけど、今はたいがいのシェルにファイラーアプリが付いてるからね。

　ファイラーの基本的な機能は、もちろんファイルの列挙。でもこれ、基本
的には OS やシェルが持つ特別な関数を呼ぶ必要があります。つまり標準Ｃ
ライブラリには備わってないってことね。 Win32 なら FindFirstFile()
と FindNextFile() を呼ぶことで実現できます。他の OS でも、こういう関
数を呼ぶ必要があるって事ね。
　標準Ｃライブラリにない理由のひとつは、 OS によってファイルシステム
が大きく違うこと。たとえば WinNT には各ファイルにセキュリティ属性が
あるけど、 Win9x にはないとか、Windows にはある「ドライブ」って概念
が、 UNIX 系にはないとかね。こういった機種依存性の高い問題を吸収する
のは難しいと判断したんじゃないかな、きっと。
　ま、それでも基本的に各 OS でのファイル処理関係の関数は似てるだろう
から、そんなに心配する必要はないと思うけどね。余裕があれば、ラッパー
クラスを作って差違を吸収するようにしてもいいかも。

　で、これは列挙方法について。来週はファイル一覧の表示方法について紹
介します。じゃね。


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

・表紙を２月バージョンに！
　毎月恒例、新しい表紙です！
　今月もかなーり時間的にやばいんですが、実は２月上旬には試験が待って
るんでこの日に掲載しないとかなりやばいんです(泣)。間に合うか！？


/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www2.justnet.ne.jp/~kabstudio/nikki2/
・プログラミングに関する質問は[鏑矢の憂鬱]にお送りください。
http://www2.justnet.ne.jp/~kabstudio/Programing/KabuU/
・購読登録を解除したいときにはこのページで行なってください。
＊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 - 2000 ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                      See you next week!!                      */


