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

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

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

/*                          引越の予定                            */

　皆さん、上のアドレスが変わっていることに気付きましたか？　そう、
KAB-studio は引っ越します！
　引っ越し先は http://www.kab-studio.com/ 。リンクを張ってくださって
いる方は、暇なときにでも変更してください。
　新しいメールアドレスは info@kab-studio.com 。今日からメールはこち
らのアドレスへと送ってください。
　で、引越の予定ですが、とりあえず来週から各ページの更新とコピーをし
て、完全にコピーし終わってから新ページとして公開するつもりです。引越
完了まではこれまでのページへと来ていただければと思います。
　新居の公開は、２月２８日か３月６日を予定しています。ちなみにデザイ
ンは変えないつもりです。そんなことしたら死ねます(笑)。ま、ただアドレ
スが変わるだけと思ってください。
　新居公開後は、旧ページを登録していたサイト（まぐまぐとかヤフーとか）
に新ページのアドレスで登録を更新して、この手続きがすべて完了したら古
いアドレスの各ページを削除していくつもりです。実際、今回は引越のシス
テム上、旧アドレスには３ヶ月しかファイルが残らないため、短期間のうち
に「移動」することになります。
　というわけで、引越が完了するまでの間、色々とご迷惑をお掛けすると思
いますが、何卒ご容赦ください。
　引っ越し後はかなり多くの更新があるはず！　これからも KAB-studio に
こうご期待！


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

・リンク集を更新。
　リンク集を更新しました。
　今回は「中華飯店」を追加。って言ってもしゅりんぷさんのページが名前
変わっただけだったり(汗)。バックアップ関係のフリーウェアとか置いてあ
ります。あ、行くときは IE4 以上で行きましょう。ねすけ不可。
　あと引越用にバナーを新しくしました。これからリンク張るって人はこの
新しいのでお願い。

[リンク]
http://www2.justnet.ne.jp/~kabstudio/Info/Link/Link.html

[中華飯店]
http://www2.tky.3web.ne.jp/~shrimp/


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

２０００年２月６日（日）：
　明日のテストのために勉強。あと PRIDE2000 。さたけぇ。

２０００年２月７日（月）：
　テストやばい(汗)。聖蹟桜ヶ丘。あうとり。そしてかぶヘッダーの広告。
毎週こんだけ入ればなぁ……。

２０００年２月８日（火）：
　勉強の合間にイラスト。イラストってうまくなんないなー。でもホーム
ページのとか名刺のとか、描かなきゃ結構あるのよねん。

２０００年２月９日（水）：
　あずまんが大王、面白いですよー。現在のおすすめコミックスはエクセル
サーガ、そんな奴ァいねえ！！、そしてこのあずまんが大王なのです。

２０００年２月１０日（木）：
　www.kab-studio.com 始動！　そして新バナー作成！　しかしアクセスカ
ウンターが用意されてない〜。

２０００年２月１１日（金）：
　そのカウンター作成とお勉強。あと金曜はいつも通りアニメばっかし。

２０００年２月１２日（土）：
　かぶスタ引越に思う。ってゆーか、なんでこんなにいきなりだったかと
ゆーと、プロバイダは変わらないからなんですね、って話。


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

２０００年２月６日（日）：
お便り
オーナー描画メニュー
枠を他の色にするには？
WM_DRAWITEM は各項目だけ
WindowFromDC() でウィンドウハンドルを取得
ダメならシステムフックでメニューのプロセスに侵入
メニューのウィンドウクラスは #32768 
面倒

２０００年２月７日（月）：
お休み

２０００年２月８日（火）：
信号処理
rExp(s) x Exp(wt) の s を「位相のずれ」となぜ言うのか
sin と cos の割合を変えて足したら sin 波をずらしたものに
角度部分に手を加えずに sin 波をずらせる

２０００年２月９日（水）：
なぜ CD とかのサンプリングレートは 44100Hz が標準？
余分な 2050 はおまけ？

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

２０００年２月１１日（金）：
独自ドメインサーバーにはアクセスカウンターが用意されてなかった
新サーバーは Perl の CGI のみ使える
Cマガジン１９９９年５月号の「 C & Perl で学ぶ CGI レッスン」
アクセスカウンター CGI
奇妙なサーバーエラー
ファイル名が問題？
似たファイルで実現
chmod は FTP で
現在テスト段階
インクリメントはメニューバーで、表示は表紙で
別々の CGI で実現

２０００年２月１２日（土）：
新アクセスカウンターを早速使用
次に作るのはリンクログ
今度は追記モードを使う予定
その方が楽そう
その次にアクセスログ
解析は別プログラムでする予定
各ページに書き込む必要があるのが大変


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

・追加単語：
通信 フレームワーク タスク フラッシュ モジュール

・今週のごめんなさい
クラス UDP enum BMP opendir チェックリストボックス 検索の仕方
EnumWindowsProc C++ライブラリ

　お、今回も結構少ないですね。もちっと増えてもいいかな？


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

　Version 3.19
レジストリに保存しよう！


「じゃ、今回の目的をいいます」
『はぁい』
「 Calc ダイアログを【OK】ボタンを押して閉じたときに〈足し算の結果〉
を保存して、次に開いたときに〈前回の結果〉が表示されるようにすること」
『つまり、データを保存して、また取り出すってことだよね』
「そういうこと。ダイアログへの表示はできるわけだからね」
『で、その保存するのに〈レジストリ〉てのを使うんだ。でもそのレジスト
リってなに？』
「それをまず見ておこうか。レジストリっていうのは、ウィンドウズのあり
とあらゆる設定を保存する巨大なファイルのこと」
『たとえば？』
「たとえば【画面のプロパティ】。このプロパティの各設定はレジストリに
書き込まれてるから」
『背景はこのファイルとか、スクリーンセーバーはこのファイル、とか？』
「そういうこと。んじゃまず、 Windows フォルダを開いてみて」
『はーい。えっと、 C:\Windows っと』
「このフォルダに System.dat と User.dat ってファイルがあるでしょ」
『うんあるよ。これがレジストリ？』
「そう、このファイルがレジストリの本体。このファイルはまめにバックア
ップを取っておくようにしてね」
『ってそれは水希ちゃんの仕事でしょ？』
「ま、僕はツールで自動的に保存されるようにしてるから大丈夫だけど。こ
れからレジストリの中を見るから、そのときうっかりデータを書き換えちゃ
うかもしれない」
『それってやばい？』
「データによってはね。レジストリにはデバイスドライバの設定とかも書い
てあるから。もし書き換えちゃって起動しなくなったら」
『レジストリをコピーすればいいわけねー』
「そういうこと。そのためにもまめなバックアップ。で、別にこのファイル
を直接見るわけじゃなくて、レジストリを見るための専用ツールが用意して
あります」
『どこに？』
「この Windows フォルダに。 Regedit.exe ってアプリがあるでしょ」
『ダブルクリック！』
　【レジストリエディタ】というウィンドウが開く。エクスプローラー風、
左に【マイコンピュータ】などのツリー、右は空白。
『れじすとりえでぃた？』
「そう。これを使うとレジストリの中を見たり、レジストリを書き換えたり
できます」
『うわ危険そう！』
「とりあえず左のツリー、開いてみ？」
『うん……なんか英語ばっかで不安〜』
「大丈夫だって、そう簡単に書き換えられることはないから」
『で、こんなかのどっかに【画面のプロパティ】の情報とかがあんの？』
「そういうこと。さて、今の壁紙は【森】だけど」
『はっ、いつの間に！　いつもはでじこなのに』
「ウソ言っちゃいけませんぜダンナ」
『ダンナちゃうもん。んで？』
「この〈壁紙は【森】ですよ〉っていう設定が、レジストリに書き込まれて
るから、それを探します。まず【マイコンピュータ】をクリックして、メ
ニューの【編集】−【検索】を選んで」
『なんだ、ＶＣと同じじゃん』
「ま、同じメーカーのものだしね。そしたら【検索対象】−【データ】だけ
をチェックして、【検索する値】を【森】にして」
『【次を検索】をオン！』
　【レジストリを検索中】というダイアログが出る。
『……』
「……」
『……結構時間かかるね』
「データ量が膨大だからね……あ、みつかった」
　左のツリーは【HKEY_CURRENT_USER\Control Panel\DESKTOP】が、右のリ
ストは【Wallpaper】が選択状態となっている。
『あ、コントロールパネルのデスクトップ、そのウォールペーパー、まさに
壁紙の設定ねー』
「って感じに、レジストリには設定を書き込むことができるわけ」
『へー。これって、なんかファイルっぽいよね』
「ファイルに近い構造にしているんだね。実際にはさっき見たふたつのファ
イルにこのツリー形式のデータが入ってるんだけど」
『この方が分かりやすいもんね、【コントロールパネル】のカテゴリ、みた
いに』
「ちなみにこのフォルダみたいのを【キー】っていいます」
『キーって鍵のこと？』
「そ、値を取り出すための鍵ってところかな」
『ふーん』
「で、【HKEY_CURRENT_USER】ってあるでしょ。これが重要。ここには〈現
在ログオンしてるユーザーの設定〉が表示されます」
『？』
「つまり、【HKEY_CURRENT_USER\Control Panel\DESKTOP】−【Wallpaper】
の設定が、僕が今使っているから【森】だったけど、金菜先輩が使っている
時には、別の壁紙になっているってこと」
『あ、いろんな人が使ってるときの話ね』
「そうそう、ひとつのコンピューターを複数の人が使う〈マルチユーザー〉
の時には、ユーザーごとにレジストリの設定が作られて、ログオンした人に
合わせて【HKEY_CURRENT_USER】の中身が差し替えられるってわけ」
『それってどんな意味があるの？』
「プログラムを作るのが楽ってこと。プログラムが【HKEY_CURRENT_USER】
に書き込むようにすれば、それだけでマルチユーザーに対応する」
『自動的に、設定を使う人ごとに分けられるってことなんだ！』
「これがレジストリに設定を書き込む理由。これを使わないで、ユーザーご
とに設定を作るとなると大変なんだ、これが」
『ってゆーか、マルチユーザーなんて考えてなかったかも』
「そういうの意識しなくていいっていうのもメリットかもね。さて、この
【HKEY_CURRENT_USER】の下の方に【Software】ってあるでしょ」
『うんあるよ。オープン』
　中には Adobe や Microsoft など、ソフトウェアメーカーの名前が並んで
いる。
『ここってアプリの設定が書き込まれてるの？』
「そう、この階層にメーカー、１つ下にアプリ、そこに各データ。つまり」
『 Calc のアプリもここに書き込むってことねー』
「そういうこと。じゃ、プログラムの作成に入ろうか。まずは、レジストリ
への書き込みから。【OK】ボタンを押したときの処理はどこに書くんだっ
け？」
『 CCalcApp::InitInstance() の……』

    if (nResponse == IDOK)
    {
        // TODO: ダイアログが <OK> で消された時のコードを
        //       記述してください。
    }

『の TODO のとこ！』
「そうでした。じゃ、この部分に次のプログラムを書き込んで」

        SetRegistryKey( "KamichanFactory" );
        WriteProfileInt( "CalcDialog", "Ans", dlg.m_iAns );

『？』
「これは試してみた方が早いかな」
『んじゃビルドして実行、 200 + 150 = 350 で【OK】ボタン！　……で？』
「レジストリエディタのメニューから【表示】−【最新の情報に更新】を選
んで」
『更新！　……あーっ！！』
　【HKEY_CURRENT_USER\Software】に【KamichanFactory】というキーが新
たに生まれている。
『なんか、ちゃんとしたメーカーのアプリみたい……』
「この名前が、このプログラムで使ってる CWinApp::SetRegistryKey() で
渡したのね」
『で、この下には……』
　【KamichanFactory】の下には【CALC】−【CalcDialog】と続いている。
「【CALC】はアプリの名前、【CalcDialog】は CWinApp::WriteProfileInt() 
の第１引数」
『んでこれを選択すると……』
　右側のリストに【Ans】−【0x000000c8(350)】と表示されている。
『ってことは【Ans】は』 CWinApp::WriteProfileInt() の第２引数で、……
次のなに？』
「 dlg.m_iAns ってなんだったか忘れたの？」
『計算した答……あ、さっき 350 って答出したんだよね、そういえば』
「というわけでまとめると、 CWinApp::SetRegistryKey() と
CWinApp::WriteProfileInt() を使うことで……」

【 SetRegistryKey() の第１引数\アプリ名\ WriteProfileInt() の第１引数】
−【第２引数：第３引数】

「って形で整数値を書き込めるってわけ」
『おお！』
「ちなみに文字列を書き込むときには CWinApp::WriteProfileString() を
使います。逆にレジストリから値を取るときは CWinApp::GetProfileInt() 
を使います」
『なんだ、分かっちゃうと簡単よねー』
「まーね。ちなみにこれは MFC を使ってるから」
『 API だと大変？』
「かなりね。ところで、キーの名前は今勝手に決めちゃったけど」
『あたしの好きにしちゃっていいってことだよね。 KamichanCorp. とか』
「そ。ま、日本語はやめといた方がいいかな」
『はーい』
「んじゃ今度は、値の取得をしてみましょう。やってみる？」
『えええ？？？　なんかすごく難しくない？』
「そんなことないでしょ。前回の最後にやったでしょ、〈ダイアログを表示
するときに答に値を入れておく〉っていうの」
『あー、あれってこれの前振り？』
「もちろん、そういうふうに順序立ててるんだよー、ちゃんと」
『苦労かけるねぇ』
「んじゃがんばって」
『……えーっと、この前は』

    dlg.m_iAns = 100;
    int nResponse = dlg.DoModal();

『ってことは、この 100 の代わりに、レジストリから持ってきたのにすれ
ばいいんだから……さっき CWinApp::GetProfileInt() でって言ってたよね』
「言ったよ。そしたら？」
『困ったときのＭＳＤＮ！　ＭＳＤＮ開いて、えーっと』
「こういうときはメンバ関数だけで探した方がいいよ」
『んじゃ GetProfileInt() って書いて、下のリストからダブルクリック！』
　ＭＳＤＮに CWinApp::GetProfileInt() の情報が表示される。
『な、なんか難しい……』
「うん、難しいね」
『……』
「でもこれ、 CWinApp::WriteProfileInt() と似てない？」
『あ、そういえば……』

BOOL WriteProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nValue );
UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault );

「こんなふうに比べてみれば分かるとおり、第１引数と第２引数は同じ意味」
『あ、ってことは同じのを渡せばいいんだ。ってことは、レジストリからの
は第３引数から取れるの？』
「取れない取れない。第３引数は〈まだ書き込まれてなかったときの値〉。
０がいいかな」
『じゃーどうやって値取んの？』
「関数から値を返してもらう方法、なんだっけ」
『……あ、戻り値！？』
「そう。レジストリから拾った値は GetProfileInt() の戻り値として返っ
てきます」
『でも UINT って変なのだよ』
「今のところは、 int と同じって考えていいから」
『あ、つまりフツーの数字ってことね』
「じゃ、どうなる？」
『えーっと、さっきの 100 のとこに……』

    dlg.m_iAns = GetProfileInt();

『で、第１引数と第２引数は同じなんだから……』

    dlg.m_iAns = GetProfileInt( "CalcDialog", "Ans" );

『んで、第３引数は 0 にしとけばいいっぽいから』
「あ、あとこの前に SetRegistryKey() を呼んでおかないといけないから」
『そっか、それのと組み合わせて、書き込むとことか指定するんだもんね。
じゃ、こんな感じかな？』

    SetRegistryKey( "KamichanFactory" );
    dlg.m_iAns = GetProfileInt( "CalcDialog", "Ans", 0 );

「そういうこと！」

/*
    Preview Next Story!
*/
『ところで 【KamichanFactory】 って作ったら、削除はどうすんの？』
「ぎくっ」
『どしたの？』
「いやね、 MFC を使ってレジストリのキーを削除する方法はないんだよね」
『ってことは……』
「作りっぱなし……」
『というわけで次回』
＜ Version 3.20 CString とストリングテーブル ＞
「につづく！！」
『あんたってときどきむっちゃテキトー』
「テキトーじゃなきゃこんな長引かなかったってことで」
『はいはい』


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

アプリのツボ
#07 ファイラー その３

　シェルエクステンションの話をする前に、シェルについて話しておこうか
な。「シェル」は「 Shell 」、「貝殻」って意味ね。コンピューター分野
じゃ「ユーザーから OS を覆い隠すもの」って意味で使われてます。
　たとえば、 UNIX 系では OS の機能としては CUI しかサポートされてい
ません。最近の Linux がどれも GUI なのは、 KDE や GNOME とかのシェル
が機能しているから。感じとしては、 MP3 プレイヤーの、本体とスキンの
関係に近いかな。ま、実際にはシェルの仕事はもっと多いんだけど、分かり
やすい例としてね。
　ウィンドウズの場合、こういったシェルの機能は OS にほぼ完全に吸収さ
れているから、ほとんど区別する必要はないんだけど、フォルダとかファイ
ル処理なんかはシェルが行っています。
　で、こういった部分でちょっとした拡張機能を使いたいときに「シェルエ
クステンション」の出番ってわけ。

　ウィンドウズのシェルエクステンションは、 COM アーキテクチャーに支
えられてます。ってことは、シェルエクステンションを使うんならまず COM
を理解した方が早いかも。基本的なことは結構簡単だしね。
　ファイル処理関係だと、プレフィックスに Sh が付く API とか、ショー
トカットなら IShellLink ってインターフェイスとかを使ったりします。具
体的な方法は Codian に書いてあるからそっちを見てね。

　これはウィンドウズの場合。ってことは、こういうファイラーをいろんな
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://www.kab-studio.com/
        info@kab-studio.com
*/


/*                      See you next week!!                      */


