
/*
    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/10(Mon) No.039
    配信数： 3340（ 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/

・表紙を１月バージョンに。
　毎月恒例、新しい表紙です！
　今回は、ま〜ま〜かな〜と。絵としてはあんまかもしんないけど、表紙と
して見るとなかなかかも。
　ちなみに詳しい解説はチョー普通な日記１２月３０日を読んでね。

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


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

・ぷらとわ質問箱スタート！
 #pragma twice のここが解らない！！　という皆さんの質問にお答えする
コーナーが登場！
 その名は「ぷらとわ質問箱」。詳細はこのメルマガの、ぷらとわの次を見
てね。
　ってゆーか実は全然決まってない……。

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


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

１９９９年１２月２６日（日）：
　PC 止まる。そして再セットアップ！　メールを失っちゃいました(泣)。

１９９９年１２月２７日（月）：
　今年を振り返る、７月。エルゴフィットキーボードはホント、いい買い物
でした。

１９９９年１２月２８日（火）：
　今年を振り返る、８月以降。ゲーメスト廃刊！！　その廃刊した雑誌が
３ヶ月後に復活しちゃったんだからすごい。そしてワールドPCエキスポ。去
年はマックの年でしたねぇ。

１９９９年１２月２９日（水）：
　今年を振り返る、残り。北海道ラジオネタ、初恋の人、あうとり。今もテ
レビ・ラジオネタは人気高し。あと毎月恒例ベクターさんのダウンロード数。

１９９９年１２月３０日（木）：
　１月表紙イラスト完成！　今回はやろうと思ってたのは全部失敗(爆)。で
も最終的な絵としてはなかなかいい感じっぽいんでちょっとうれしい。

１９９９年１２月３１日（金）：
　大晦日。なんで来年の抱負なぞ。４月から STL & iostream 入門っつーメ
ルマガ始めるんで期待しててねん。そして鐘突き。

２０００年１月１日（土）：
　あけましておめでとう！　な１日。

１９９９年１月２日（日）：
　買いたい物。実際に買うのはスピーカーとこまごまとしたものになりそう
やね。

１９９９年１月３日（月）：
　「買いたかったもの」にあったレンタルサーバーに問題発生？　ドメイン
取得やサーバーのレンタルってなかなか大変そうっす。

１９９９年１月４日（火）：
　昨日に引き続きレンタルサーバーな話。あとレギュラー番組が復活しつつ
あるんでいつも通りアニメの話とか。

１９９９年１月５日（水）：
　久しぶりに立川駅へ。やっぱアウトトリガー略してあうとりは面白いっす。
これが家で通信対戦できるようになったらいいんだけどなー。あとイラスト
関係の本をぽこぽこと購入。

１９９９年１月６日（木）：
　「おかいもの、おかいもの、おかいもの、ふぅふぅふぅふぅ」っていいで
すよねーとゆー話……。

１９９９年１月７日（金）：
　が、なぜか大評判(笑)。CM ネタって人気あるのね。皆さんもクマさんス
クリーンセイバーを試してみましょう。試すだけかも(汗)。

１９９９年１月８日（土）：
　久しぶりにアニメいっぱいの話。やっぱアニメっていいねぇ。そしてクマ
さんネタは続く。


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

１９９９年１２月２６日（日）：
お便り
Java 用 OpenGL と DirectX
ローカルテスト用 Web サーバー
Apache と AN HTTPD
XML で構文解析
WWW 読み込みテストアプリが動かない
ソースコード

１９９９年１２月２７日（月）：
お便り
ソースコードに対する赤入れ
見事解決
RFC はちゃんと読みましょう
お便り
send のバッファリング
例外処理の実装方法

１９９９年１２月２８日（火）：
電子情報学実験のレポート用実験プログラムの作成
音声データを窓関数に掛けて FFT 掛けて gnuplot で出力
std::complex を使ってみる
std::log() とか難しい

１９９９年１２月２９日（水）：
実験プログラムは難敵だった……

１９９９年１２月３０日（木）：
実験プログラムは難敵だった、２……

１９９９年１２月３１日（金）：
お休み

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

１９９９年１月２日（日）：
#pragma twice 略してぷらとわ書き
相変わらず行き当たりばったり

１９９９年１月３日（月）：
お休み

１９９９年１月４日（火）：
ぷらとわ１話完成
アイコンの話が２話に伸びる
次は透明色や選択色について
実験プログラム
ベクトルのかけ算が分からない
std::complex::operator*() の実装

１９９９年１月５日（水）：
お便り
それは複素数のかけ算
わてってバカ……
お便り
MFC アプリでグローバル変数を作るには？
CXxxApp に public メンバ変数として持たせ
theApp の参照を返す関数を作れば
呼び出すことでどこからでもアクセスできる
できればメンバ変数は private にして
アクセス用関数を作った方がいい

１９９９年１月６日（木）：
コンパイラのバグ？
サンプルコード
関数テンプレートのインスタンス化時、
引数を抽象クラスにすることができてしまう
コンパイルエラー発生せず、ランタイムエラー発生
お便り
ありがとう

１９９９年１月７日（金）：
実験プログラムが頓挫
関数の引数が整合性取れてないので呼び出せない
お便り
STL を使ったファイル処理が大変
４月から「 STL & iostream 入門」を出すよん
１行読み込みには std::istream::getline() がお奨め
サンプルコード
標準 C++ ライブラリと標準 C ライブラリの混在は？
現状では混在させるのが適当かと
VC の STL にはハッシュマップは付いてない？
付いてないらしい
SGI 版 STL をダウンロードして使うのがいいかも

１９９９年１月８日（土）：
実験プログラム完成
２次元配列を１次元配列にみたてて渡すと通った
C の規則的に許されているのか不明
お便り
CMap もハッシュマップのひとつ
ラッピングすれば結構使えるかも
お便り
Hit any key を std::iostream では？
_getch() がお奨め
ただし VC 専用
std::string と std::cin の組み合わせ
std::cin::clear() でエラー状態をリセットできる


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

・追加単語：
Beep

・今週のごめんなさい
リストビュー

　あらま、今回も少ないね。そんなに充実してるとは思わないんだが……。


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

　Version 3.14
アイコンとリソース


「今回はアイコン！」
『おー！』
「……お絵かきして終わり、と思ってるでしょ」
『えーっ、ってことはなんか結構めんどい？』
「めんどいってゆーかなんてゆーか……ま、とりあえずやってみよか」
『はーい』
「まずワークスペースを開いて」
『メニューの【表示】−【ワークスペース】っと。んで【ResourceView】の
ページ、ツリー表示の中から【Icon】−【IDR_MAINFRAME】でしょ？』
　右クリックメニューから【開く】を選ぶと、メインウィンドウに〈３つの
箱〉の絵が表示される。その左上に、原寸サイズの絵。
「そう。このアイコンが、ダイアログの右上とか、エクスプローラーとかに
表示されるアイコン」
『でもこの変なデザインのアイコンはなに？』
「ＭＦＣって書いてあるでしょ。ダイアログとかと一緒で、このアイコンも
自動的にＶＣが作ってくれるわけ」
『変なのー』
「で、この上に【デバイス】っていうのあるでしょ」
『うん、【標準 (32x32)】って書いてある』
「このドロップダウンリストに……」
『【スモール (16x16)】っていうのもあるね。これ選ぶの？』
「そう。こっちには」
『あ、ちっちゃいアイコンだ！　そういえば、前にやったね、こんなの』
「Ver 3.6( No.031 ) の時だね。ウィンドウもエクスプローラーでの表示も
大小両方のアイコンが必要だから、 IDR_MAINFRAME っていうひとつの名前
で大小２つのアイコンを持つことができるってこと」
『ってことは、これって別々？』
「そゆこと。それを確かめるのも兼ねて、小さい方を赤で、大きい方を青で
塗りつぶしてみて」
『はーい！　んっと……』
「あ、えっとね」
『ダメ！　言わないで、分かるから』
「……」
『やっぱまずは色よね』
　【色】ツールバーから赤をクリックする。ツールバー左上の黒い四角が赤
に変わる。
『そしたら、……これかな？』
　【グラフィックス】ツールバーから【枠のない４角】を選ぶ。
『あとは塗りつぶすだけ！』
　描画枠の左上から右下へとドラッグする。描画枠が赤に塗り潰される。左
上の実サイズも真っ赤になる。
「へー、一発でできたね」
『だって他のフォトレタッチツールと似てるもん。じゃ、次は【標準 (32x
32)】にしてっと』
　【スモール (16x16)】から【標準 (32x32)】に変えられ、【色】ツールバー
から青をクリック、先ほどと同様にドラッグして青色に塗り潰す。
『はい終わったよん』
「念のためもう一度【スモール】を見てみて」
『？　【スモール】っと。あ、赤。そっか、独立してるってことだよね』
「これで、小さいアイコンは赤色、大きいアイコンは青色になりました。ん
じゃビルドして」
『ビルドっと。あ、速い』
「プログラムは書き換えてないから早いってこと。で、ビルドして作った〈実
行ファイル〉をフォルダで表示してみて」
『エクスプローラーでってことねー。んーと、メニューの【ファイル】−【開
く】で……どうするんだっけ』
「作られた実行ファイルは【Debug】フォルダにあるから」
『んじゃ【Debug】の右クリックメニューから【エクスプローラー】っと。
あ、赤い！』
「大きい方も確認しないと」
『そうそう。右クリックメニューから【表示】−【大きいアイコン】っと。
お、今度は青！　ちゃーんと、ふたつのアイコンが入ってるんだね』
「ふっふっふー」
『な、なに？』
「じゃ、エクスプローラーは閉じて、今度は実行してみて」
『ん？　実行……あーっ！！　ダイアログのアイコンが青い！？』
「つまり大きいアイコンの方がダイアログにセットされてるってことだね」
『ウソー！！　なんでなんで？』
「アイコンダイアログにセットしたとき、どうしたか憶えてる？」
『えっとね、LoadIcon() と SetIcon() っての使った』
「これも Ver 3.6( No.031 ) を見てねって事で。で、この LoadIcon() って
いうのがクセモノで、実は〈大きいアイコン〉を優先的に取得するように作
られてるんだよね」
『だからおっきい方？』
「そゆこと。で、これに対処する方法が、小さいアイコンだけにしちゃうこ
と」
『あー。って、そしたらエクスプローラーで表示するときはどーすんの？』
「ようするに別に新しく作ればいいってこと」
『？』
「試してみようか。まずワークスペースの【ResourceView】で、【Icon】
−【IDR_MAINFRAME】を右ドラッグ」
『どこへ？』
「【Icon】フォルダへ」
『それって複製作るってこと？』
「そういうことだね」
　ドラッグするとメニューが表れる。項目は【移動】と【コピー】」
『【コピー】っと。 IDR_MAINFRAME1 ってゆーのができたよ』
「ちゃんと複製かどうかチェックしてみて」
『ダブルクリック、うん、同じアイコンがあるよ』
「そしたら IDR_MAINFRAME1 ってIDを変えようか」
『やってみる！　んっと、右クリックメニューから【プロパティ】……』
「そうだね、 IDI_DLGICON でいいかな」
『じゃ、ＩＤを IDI_DLGICON っと。そしたら？』
「左上の【デバイス】が【標準 (32x32)】になってる？」
『うん、なってる』
「これを削除しちゃいます」
『削除！？』
「削除して、小さいアイコンだけにするわけ。そうすると LoadIcon() は小
さいアイコンをロードしてくれるから」
『なるほどー。しかも IDR_MAINFRAME はそのままだから、エクスプローラー
の表示は大丈夫ってことね』
「そゆこと。で、その削除の方法。メニューの【イメージ】−【デバイスイ
メージの削除】を選択すると」
『選択すると……』
　【大きいアイコン】のイメージが消え、小さいアイコンが表示される。
『【デバイス】も【スモール (16x16)】だけになってるね。これが〈小さい
アイコンだけにする〉ってことなんだ』
「でもこれだけじゃダメ」
『このアイコンを LoadIcon() する！』
「そういうこと。 Ver 3.7( No.32 )で見た……」


BOOL CCalcDlg::OnInitDialog()
{
// 略。
    SetIcon(m_hIcon, TRUE);
    SetIcon(m_hIcon, FALSE);
// 略。
}


「の部分を、」


BOOL CCalcDlg::OnInitDialog()
{
// 略。
    SetIcon(m_hIcon, TRUE);
    SetIcon( AfxGetApp()->LoadIcon( IDI_DLGICON ), FALSE );    //ここを変更。
// 略。
}


「ってすればＯＫ」
『んー、なーんか分かるような分かんないような……』
「m_hIcon がなんだったか憶えてる？」
『確かメンバ変数なんだよね、アイコンが入ってる。あ、これには大きいの
が入ってるってことなんだ』
「そう。同じファイルに……」


CCalcDlg::CCalcDlg(CWnd* pParent /*=NULL*/)
    : CDialog(CCalcDlg::IDD, pParent)
{
    //略。
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}


『あ、これ初見』
「ちょっと難しいから後回しにしてたんだけどね、ここで IDR_MAINFRAME の
アイコンをロードしてるんだけど」
『おっきい方だけ。小さい方は別に IDI_DLGICON をロード、ってことねー』
「そゆこと。ビルドして確認してみて」
『ビルドして実行！　ちゃんとタイトルバーが赤いアイコンになってる！』
「まとめると？」
『 IDR_MAINFRAME と別に〈小さいアイコンだけ〉のを作って、それを ダイ
アログに表示する、でいーんでしょ？』
「そういうこと。じゃ、注意点を３つほど」
『はーい』
「まずひとつめ。ウィンドウのアイコン、実は〈小さい〉わけじゃありません」
『どゆこと？』
「【画面のプロパティ】−【デザイン】の【アクティブ タイトルバー】の
サイズを大きくすると……」
『あ”、ウィンドウのアイコンも大きくなった……』
「環境に左右されるってことを考えると、一概に〈小さい方がいい〉とも言
えないかなー」
『また環境〜！？』
「ふたつめ。ウィンドウに表示するアイコンは具体的に選べることは分かる
よね」
『つまり LoadIcon() に渡すので選べる、ってことでしょ？』
「そうそう。じゃ、エクスプローラーに表示されるアイコンは？」
『…… IDR_MAINFRAME って名前のアイコンがそーなるんじゃない？』
「ぶっぶー。じゃ、メニューから【表示】−【シンボルブラウザ】を選んで」
『シンボルブラウザっと』
　ダイアログが表示される。左上のリストには【シンボル名】として見慣れ
た単語が並んでいる。その右側には【値】として数字が書かれている。
『 IDR_MAINFRAME とか IDI_DLGICON があるね。そういえば、ずっと昔に
〈ＩＤはホントは数字〉だって教わったような……』
「 Ver 1.5 ( No.008 ) だね。 IDR_MAINFRAME みたいなＩＤ名は仮のもの
で、ＩＤのホントの正体はその右の数字。でも数字だと何がなんだか分かん
ないから IDR_MAINFRAME ってＩＤ名で操作する方が楽」
『ハンドルみたいなの？』
「うーん、まー、近い、かな」
『ってことは結構ハズれてるのね……』
「このシンボルブラウザは、そのＩＤ名とＩＤナンバーを確認するためのダ
イアログってことだね」
『今まで使わなかったんだからあんまり意味なさそう……』
「で、実はエクスプローラーに表示されるのは〈一番ＩＤナンバーの小さい
アイコン〉なんだよね」
『え、ってことは、今 IDR_MAINFRAME は 20 で IDI_DLGICON は 21 だけど、
逆だったら IDI_DLGICON の方がエクスプローラーに表示されちゃうの？』
「そういうこと。じゃ、試してみますか。とりあえず【シンボルブラウザ】
ダイアログを閉じて」
『閉じて？』
「アイコンの IDR_MAINFRAME のプロパティを表示して」
『ツリーから右クリックメニュー【プロパティ】っと』
「そしたらＩＤを」

IDR_MAINFRAME=30

「ってして」
『あ、そうすると IDR_MAINFRAME のＩＤナンバーが 30 になるんだ』
「そういうこと。シンボルブラウザで確認しておくといいかもね。で、そし
たらビルドして」
『エクスプローラーで見ると……大きいアイコンのはずなのに、赤い！』
「IDI_DLGICON のＩＤナンバーの方が小さくなったから、 IDI_DLGICON の
アイコンが表示されてるってこと」
『なんか、こーゆー細かいとこで決まるんだね……』
「じゃ、最後の注意点。普通は IDR_MAINFRAME のアイコンを完成させてか
ら、複製を作った方が楽だから」
『先に言ってよ……』

/*
    Preview Next Story!
*/
『相変わらず、なんか細々してて分かんないかも』
「ま、憶える必要はないでしょ。これ見ながら作ればいいんだから」
『そういう意味じゃ、結構役立ちそうよねー』
「そういえば、こういうことってあんまり本に載ってないんだよね」
『というわけで次回』
＜ Version 3.15 ２５６色のアイコン ＞
「につづく！！」
『えっ、まだアイコン？』
「アイコンは奥が深いのです」
『鈴木さんちの井戸くらい？』
「誰やねん鈴木さんて」


/*                      ぷらとわ質問箱                            */
http://www2.justnet.ne.jp/~kabstudio/Programing/PragmaTwice/

　こんにちわ、鏑矢です。
　今日の #pragma twice 略してぷらとわはどうでしたか？
　わかんなかった、それは困りましたね。
　とゆーわけで！

[ぷらとわ質問箱]
http://www2.justnet.ne.jp/~kabstudio/Programing/PragmaTwice/

　というページを作りました。
　いつものぷらとわ紹介の下に、質問を送る欄を設けました。
　これで皆さんの疑問も完全解決！

　……実は回答方法をまだ決めてません(爆)。
　送られてきた量によって考えます。
　もし、思いっきり少なかったらなくなります(爆)。
　そのとき送られてきた質問はかぶゆ〜で答えるのでご心配なく。
　それなりに多かったら、毎週ここで答えます。
　もしものすごく多かったら……どうしよう(汗)。
　ま、とりあえず送ってみ！　話はそれからだ！


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


アプリのツボ
#03 テキストエディタ その３

　私が愛用している秀丸エディタや、Visual Studio のエディタ、Outlook 
Express のエディタなどは、リッチエディットコントロールを使用していま
せん。つまり、１から新しく作ったエディタってことね。
　わざわざ作る理由は、リッチエディットコントロールでは実現できない機
能を使いたいから。背景全体の色の変更や、大きな文章の高速表示とかかな。
リッチエディットコントロールは重いところがあるから、単純にエディタと
してのみ使いたい場合には辛いかもしれないし。
　あと、マルチプラットフォームを考える場合も問題。他の OS には当然
リッチエディットコントロールはないから。言い換えれば、多くの OS では
簡単なエディタを作るだけでも一苦労、ってことがあり得るわけね。今の
シェルライブラリはサポートしているだろうけど。

　エディタを新しく作る場合、リッチエディットコントロールと同じような
処理を自前で実装する必要があります。キー操作に合わせて文字を書き込み、
カーソルを動かし、選択やカット＆ペーストができるように実装する。とて
も大変なことです。
　たとえばカーソル。専門用語では、文字入力するためのカーソルは「カレ
ット( Caret )」っていいます。ウィンドウズではこれ、じつはグローバル
リソースに指定されています。で、こんなふうにＡＰＩを使って表示します。

void DoCaret( HWND p_hWnd, HINSTANCE p_hInst )
{
    HBITMAP hBmp
        = ::LoadBitmap( p_hInst, MAKEINTRESOURCE( IDB_BITMAP1 ) );
    ::CreateCaret( p_hWnd, hBmp, 20, 20 );
    ::ShowCaret( p_hWnd );
    ::SetCaretPos( 150, 150 );
}

　IDB_BITMAP1 はカレットとして表示するビットマップリソースのＩＤね。
あとこのコードは生半可な知識で作ったものだから、間違ってる部分もある
と思うから注意してね。それだけ、情報が少ないってことかも。
　ただカレットを表示するだけなのにこんなに大変。しかも、これってほと
んど意味ないし。たとえば「 IME の変換ウィンドウ」はこれとは全然関係
ないんです。これは来週。じゃね。


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

・誕生日。
　私、鏑矢正伝、２５歳になります。この日はたぶん日記でなんか語ってる
ことでしょう。

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


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

・KAB-studio.h 縮刷版更新。
　KAB-studio.hの縮刷版、つまりこれまでの配信分を圧縮ファイルとしてま
とめたものを更新します。今回は１号〜４０号までです。
　今回も「KAB-studio.h（#pragma twice 含む）」と「#pragma twice のみ」
の両方をダウンロードできるようにします。ダウンロードはフリーウェアイ
ンフォメーションルームにて。

[フリーウェアインフォメーションルーム]
http://www2.justnet.ne.jp/~kabstudio/Freeware/


/*                          ご注意！！                            */

・このメールを返信しないでください。
・感想はこのページから送ってください。
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 - 2000 ALL RIGHTS RESERVED.
        http://www2.justnet.ne.jp/~kabstudio/
        kab-studio@multimedia.design.co.jp
*/


/*                      See you next week!!                      */


