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

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

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

/*                あけましておめでとうございます！！              */

『みんなー、あけましておめでとー！！』
　耳に手をかざす。
『聞こえないぞぉ。じゃ、もっと大きな声で、あーけーまーしーてー』
「はいはい、もういいから」
『えー？　お正月って言ったらこーゆーバカッバカしいのがセオリーで
しょ？』
「分からなくもないけど……ま、それはともかく」
『読者の皆さん、あけましておめでとうございます！！』
「メールマガジン KAB-studio.h は２度目の新年を迎えました」
『これもひとえに皆さんのおかげ！　……そうなの？』
「そうなの！」
『今年はプログラミング弱体化がテーマって聞いてるけど』
「う”っ！　まだ確定じゃないけどね」
『もし弱体化するんならー、 KAB-studio.h はどうなるの？』
「週間発行は変わらないだろうから、たとえば #pragma twice の掲載が隔
週になるとか」
『それってホントにいつ終わるかわかんなくなるよ……』
「あと、ホームページの方で辞書とかぶゆ〜が更新されなくなったら、その
コーナーもなくなるけど、それくらいかな」
『思ったほど、こっちは変わんないんだね。もし、強化されるのがなんかあ
るとしたら？』
「……小説が載るとか？」
『読者が減る……』
「ま、あくまで未定。実際に４月になってみないとね」
『とゆーわけでガッカリしてる皆さん！　皆さんが１部につき２０円支払え
ば月３０万で会社行かずにむぐむぐっ』
「そ、それでは皆さん、今年もよろしくおねがいいたします！」
『ほめはいひたひまふっ！』


/*                ２００１年１月１日（月）の更新                  */
http://www.kab-studio.com/

・あけましておめでとうございます！！
　というわけでホームページの表紙に今年の抱負を書きました。あ、上の文
章と順番逆かも(汗)。詳しい内容は日記の方で。
[ チョー普通な日記 ２００１年１月１日 ]
http://www.kab-studio.com/nikki2/n13_01a.html#20010101

・１月表紙壁紙を追加。
　表紙のデザインが変わったこともあって、今年からは壁紙を作って、その
一部を表紙に掲載するという形式にします。壁紙は CG Gallery にて。今月
は大正浪漫っぽい火美ちゃんです。
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/


/*                ２００１年１月８日（月）の更新                  */
http://www.kab-studio.com/

・Codian に STL を追加
　Codian に STL & iostream 入門から STL の #14 - #17 を掲載。
今回はイテレーターです！
[ Codian ]
http://www.kab-studio.com/Programing/Codian/


/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2000/12/24 (Sun)
　新表紙クリスマスバージョン完成！　今回はなんかえっちぃぞ(汗)。今年
を振り返る・９月前半後半。護身術の練習なんかしちゃダメぇ！！

2000/12/25 (Mon)
　新表紙コタツバージョン完成！　今回は……手抜きです(爆)。今年を振り
返る・１０月前半後半。そしてラブひな・クリスマススペシャル。冬コミは
クリスマスじゃなーい！

2000/12/26 (Tue)
　新宿行ってデジタルビデオカメラ買ってきました。面白い！　こーゆー面
白いものをなぜとっとと買っとかなかったんだろ〜。今年を振り返る・１１月
前半後半。

2000/12/27 (Wed)
　ギルティギアゼクスの日々。まだレベル７８を超えない〜。グルグル最終
回。

2000/12/28 (Thu)
　「今年の抱負」背景イラスト完成。今年を振り返る・１２月前半後半。今
年は就職活動とゼミ、そしてゲームの１年だった(爆)。

2000/12/29 (Fri)
　１月壁紙完成！！　大正浪漫な着物を着た火美ちゃんです。結構いい感じ
かも。そしてギルティギアゼクス、レベル１００クリア！　その攻略法をつ
らつらと。当面はガンフレイム命で。あとフロッピーをＲにバックアップし
たり、祝２６万ヒットだったり、Ｇセイバーがダメダメだったり(爆)。

2000/12/30 (Sat)
　１月壁紙の日付ミス(汗)。今世紀、これが良かった！　ってのを、アニメ、
ゲーム、映画、音楽、そしてコミックスについて語る。わてがアクション系
に染まってることがそこはかとなく分かります。

2000/12/31 (Sun)
　家で粛々と年を迎える。今年はいろんなことがあったなー。やり残したこ
とも……。そしてあけましておめでとうございます第１弾。

2001/01/01 (Mon)
　今年の予定を掲載。プログラミングページのほとんどは更新を停止します。
代わりにウェブコミックが……。ま、その辺は会社入ってからね。そして続々
と送られてくるあけましておめでとうございます！！　あとマ・メゾンにて
お食事。

2001/01/02 (Tue)
　家でのんびり。欲しくなったシリーズ・ Palm 。外でインターネットから
情報を拾いたいときがあるんでねー。

2001/01/03 (Wed)
　深夜までギルティギアゼクスしたり、ＣＣさくらの総集編見たり。

2001/01/04 (Thu)
　ぷらとわ書き。ギルティギアゼクス、１０分切れない（泣）。欲しくなっ
たシリーズ・パソコン。家にもう一台あると助かるんで。

2001/01/05 (Fri)
　欲しくなったシリーズ・ザウルス。どうやら「外でインターネット」には
最適の PDA らしい。ギルティギアゼクスのフォルトレスキャンセル指南。

2001/01/06 (Sat)
　ゾイド／ＺＥＲＯやサイファイハリーなど、久々のアニメ色々。そしてレ
ガシーフリーＰＣと床下換気扇。


/*                         鏑矢の憂鬱                             */
http://www.kab-studio.com/Programing/KabuU/

2000/12/24 (Sun)
お便り
リストコントロールのテキスト変更を他の列でもできない？
デフォルトじゃ無理だと思う
エディットボックスを動的に作るとか

2000/12/25 (Mon)
お便り
×ボタンやアイコン化ボタン等を非表示にするには？
ウィンドウスタイルから WS_SYSMENU を取り除く
サンプルコード
コントロールメニューボックスがなくなる
それだとアイコンとキャプションを書く必要がある

2000/12/26 (Tue)
お便り
CALLBACK を取り除いたらうまくいった
お便り
DOS窓を非表示にするには？
CreateProcess() なら STARTUPINFO の設定を変更
サンプルコード
プログラム上から実行しない場合
DOS 窓のウィンドウ名は実行ファイル名から .exe を取り除いたもの
ウィンドウクラス名は tty 
それを ShowWindow() で SW_HIDE する

2000/12/27 (Wed)
お便り
DOS コマンドを実行するには？
DOS コマンドは、 Windows\command.com が受け持つ
command.com /c del D:\A.txt という形式で
これを CreateProcess() すればいい
サンプルコード
コマンドライン全体を第２引数に

2000/12/28 (Thu)
お便り
::SHBrowseForFolder をツリービューに表示する方法は？
ないと思う
ダイアログのサイズを変えたりすれば似せられなくもない

2000/12/29 (Fri)
お休み

2000/12/30 (Sat)
お休み

2000/12/31 (Sun)
インターネット上からデータを漁るプログラムを作成中
google に検索パラメーターを渡して検索結果を取得する
漢字を URL に埋め込むためのエンコード
１６進形式にして % を付加
なぜ http://www.google.com/ で日本語ページが出るんだろう

2001/01/01 (Mon)
あけましておめでとうございます

2001/01/02 (Tue)
お休み

2001/01/03 (Wed)
regex のテスト
Perl の正規表現よりも機能が少ない
最小マッチが使えないのが

2001/01/04 (Thu)
お休み

2001/01/05 (Fri)
お休み

2001/01/06 (Sat)
お便り
ダイアログコントロールの上下関係を変えるには？
表示される順番を変えればいい
プロジェクト名.rc をテキストモードで開く
サンプルコード
順番を入れ替えればいい
フォーカスの変更とＺポジションの変更でも
サンプルコード


/*             プログラミング辞書・今週の追加単語                 */
http://www.kab-studio.com/Programing/Dictionary/

・追加単語：
&& #undef AFX JPEG エラーコード 

・今週の状況：
　今回は２週分なのにたった５単語です(汗)。まー時期が時期だし。


/*                       金菜さんの憂鬱                           */
http://www.kab-studio.com/Programing/KanaU/

テンプレート
#09 テンプレートライブラリ

　#03 とかで「テンプレートのインスタンス化」ってことについて書いたけ
ど、今回はその応用編。
　最近、「テンプレートライブラリ」っていうものが増えてます。 STL や
iostream 、 ATL や WTL などなど。テンプレートライブラリは、その関数
やクラスのほとんどを関数テンプレートやクラステンプレートで構成してい
るライブラリ。あ、クラステンプレートは来週から紹介する、テンプレート
クラス版ね。

　テンプレートライブラリのほとんどは、ヘッダーファイルしか持ってませ
ん。その理由は「テンプレートのインスタンス化」と深く関わっています。
　関数テンプレートは、呼び出されてテンプレート引数を特定の型に置き換
えて、仮のソースコードを生成、ここまでがインスタンス化、そしてコンパ
イルされて機械語のコードへと翻訳されます。これが関数テンプレートが実
行ファイル形式になるまでの順序です。
　これが、ソースファイルに関数テンプレートを置けない最大の理由。コン
パイラが関数テンプレートの呼び出し部分をコンパイルしようとしたとき、
関数テンプレート全体がコンパイラから見えなきゃいけないんです。そう
じゃないと、テンプレート引数の置き換えができないから。だから、関数テ
ンプレートの場合には、定義部をソースファイルに置く、ってことはできま
せん。

　さらに言えば、中間ファイルや DLL にしたらもうテンプレートとして機
能しないってことにも注意。関数テンプレートが中間ファイルとかになって
るってことは、テンプレート引数がもう特定の型に置き換えられてコンパイ
ルされてるわけだから、それはもう関数テンプレートとして使えないわけ。

　これはなにもライブラリに限らない、ってことに注意してね。つまり、普
通にプログラムを組んで、複数のソースファイルからある関数テンプレート
を呼び出す場合には、その関数テンプレートはヘッダーファイルに置いて、
各ソースファイルからインクルードしなきゃダメってこと。もちろん、宣言
部はヘッダーファイルに置いて、定義部をソースファイルに置く、って形式
もダメ。関数テンプレートを呼び出している部分から、呼び出された関数テ
ンプレート全体が見えていなければ、その関数テンプレートをインスタンス
化できないわけだからね。次回もこの話。じゃね。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『つまんないなー』
「お正月番組？」
『ちがうー、ホームページ。どこも更新してない！』
「特に企業系はね、もう少しなんかがんばって欲しいけど」
『かぶスタはがんばってたね』
「そういうイベントって、大事にした方がいいだろうからね」
『そーそー、あたしは晴れ着みせられたし〜』
「あれは晴れ着なのかな……」
『うっさいわねー』
「というわけで、かぶスタジオはいつも皆さんの側に！」
『方針が変わっても、作ってる人は変わんないってこと、忘れないでね！』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


/*                       #pragma twice                            */
http://www.kab-studio.com/Programing/PragmaTwice/


　Version 5.24
ウィンドウスタイルいろいろ

「前回はエクスプローラーのウィンドウについて見てきたけど、今回は
FileTest ダイアログについて見ていきます」
『ダイアログもウィンドウなんだよね』
「そう、でも普通のウィンドウといくらか違う部分もあるからね。とりあえ
ず実行して、 Spy++ で照準合わせてみて」
『ほいっと。ウィンドウハンドル 00000B38 、キャプション "てすと" 、
ウィンドウクラス "#32770 (ダイアログ)" ってなにこのウィンドウクラス』
「ダイアログもウィンドウのひとつなんだけど、違う部分のひとつは、ダイ
アログはウィンドウクラスの登録をしなくていいってとこ」
『この前の長ったらしいのしなくていいんだ』
「そう。で、代わりにこういう #32770 ってウィンドウクラスが登録されて
ます。ダイアログは全部このウィンドウクラスだから」
『え、全部？』
「一応ね。ダイアログっぽく見えるものの中には、普通にウィンドウとして
作って、スタイルを変更してダイアログっぽく見せてるものもあるから」
『そんなことできんの？』
「もちろん。ウィンドウは、ダイアログもコントロールも、基本のウィンド
ウを元に作られてるんだから」
『そーゆーもんなんだ』
「じゃ、そのスタイルを見てみると」
『 94C800C4 だって』
「この数字を実際に見てみようか。例によって CFileTestDlg::OnBtnShow() 
の最初で」

void CFileTestDlg::OnBtnShow() 
{
    TRACE( "%X\n", GetStyle() );

    return;
//  あとは残しておきましょう。

『あ、ちゃんと 94C800C4 って出た！』
「 CWnd::GetStyle() はウィンドウスタイルの値を取得します。この値は
ビットフラグになってるから」
『たとえばこの前見た……えっと、 OK して【スタイル】ページっと、
WS_POPUPWINDOW とかがこの中に含まれてるのか調べるんなら、 & すればい
いんだよね』
「そういうこと。 WS_POPUPWINDOW は 0x80880000 だから」
『だと、 10000000100010000000000000000000 ってビットになるんだよね』
「リトルエンディアンだから 00000000000000001000100010000000 だよ」
『あ、そういえば。なんかバイトオーダーなんて懐かしい……。でさ、
WS_POPUPWINDOW が 0x80880000 ってどうやって分かったの？』
「見てみたから。 WS_POPUPWINDOW で【ファイルから検索】してみ」
『ほい。あ、 Winuser.h ってとこにあった』

#define WS_POPUPWINDOW      (WS_POPUP          | \
                             WS_BORDER         | \
                             WS_SYSMENU)

『？？』
「 #define は分かるでしょ」
『うん、定数値作るときに使うヤツ。１番目のを、２番目のに置き換えるん
だよね。でも……』
「 #define 使った Ver 4.09 ( No.059 ) でこういう例を見せたでしょ」

#define DEF_FLAG_OK 1

『これだと DEF_FLAG_OK を 1 に置き換えるんだよね』
「最後にセミコロンが付いてないでしょ」
『ホントだ！』
「最初に # がついてるのは、最後にセミコロンが要りません。つまり改行
すればＯＫってこと」
『うん、そだね。でもそれだと、改行して続き書きたいときはどーすんの？』
「そういうときは \ を付けます」
『あ！　それが上の \ なんだ』
「だから、上のは」

#define WS_POPUPWINDOW    ( WS_POPUP | WS_BORDER | WS_SYSMENU )

「と同じ」
『ほー。で、 WS_POPUP とかは……あ、すぐ上にあるね』

#define WS_POPUP            0x80000000L

『そっか、こういうののビット和で 0x80880000 が出てくるのね』
「そゆこと」
『質問！　最後の L はなに？』
「この数字は３２ビットサイズですよって意味。 MSDN の 【C++ 整数定数】
ってページに書いてあるから」
『 unsigned にする u なんてのもあるんだ』
「ま、わざわざ付ける必要はないんだろうけどね」
『質問２！　( WS_POPUP | WS_BORDER | WS_SYSMENU ) ってカッコでくくっ
てるのはなんで？』
「たとえば！」

WS_POPUPWINDOW * 3 

「ってしたとき。カッコ付きだと」

( WS_POPUP | WS_BORDER | WS_SYSMENU ) * 3 

「でいいんだけど、カッコがないと」

WS_POPUP | WS_BORDER | WS_SYSMENU * 3 

「で、先に WS_SYSMENU * 3 が計算されちゃうから」
『そっか、優先順位が * の方が上だからなんだ』
「これは #define が〈単に置き換えしかしない〉っていうのが原因。他に
定数値作る方法があったでしょ」
『 const int とか enum とかだよね』
「そうそう。そういうのは置き換えじゃないから、こういう問題はおきない
わけ」
『だから #define よりもこういうの使った方がいいってことね。最後の質
問！　 WS_POPUP とかのフラグって左の方から、しかも 8 からビット使っ
てくけど、なんで？』
「たぶんバイトオーダーの関係だろうね」
『でもさ、 8 からだと、１バイトの中じゃ左からになるよね』
「そういえばそうだね……ま、それはいいとして」
『あっ逃げた』
「たぶん分かってると思うけど、このウィンドウスタイルは、ウィンドウズ
の機能だからね」
『それって API の機能ってことでしょ？　うん分かってたよ、 Winuser.h 
って MFC のファイルじゃないじゃん』
「そう、だからたとえば〈 WS_POPUPWINDOW ってどういうスタイル？〉とか
は API のリファレンスに載ってます。 MSDN で CreateWindow() 見てみて」
『ほいっと。なんかかなり長いページだね』
「下の方に」
『あった！　WS_BORDER とか WS_CAPTION とか、 WS_POPUPWINDOW もちゃん
とあるね。あ！』
「どしたの？」
『この前 CWnd::Create() でこういうの渡してたから、それと関係ある？』
「ってゆーかそのまま。 CWnd::Create() は CreateWindow() 呼んでるから
ね」
『ってことは、ホントはウィンドウスタイルって、ウィンドウ作るときに決
めるもんなんだ』
「そゆこと。ダイアログの場合は簡単にできるんだけどね」
『どやって？』
「ダイアログエディタ開いて、ダイアログのプロパティ見てみ」
『右クリックからプロパティ……あ、スタイルってある！！　もしかしてこ
れ全部、スタイルなの？』
「そう、スタイル。ここでダイアログのスタイルを決められるから、わざわ
ざ指定しなくていいわけ」
『ほー』
「ついでに、 FileTest.rc をテキスト形式で開いて」
『 FileTest プロジェクトの中にそういうファイルがあるのね……ダイアロ
グエディタ閉じちゃえって』
「閉じていいよ」
『ほい。あ、自分で探してみるから……ここ？』

IDD_FILETEST_DIALOG DIALOGEX 0, 0, 206, 159
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

「そう！　さっきの【ダイアログ プロパティ】での設定がここに書き込ま
れて、ダイアログを表示するときに使用されます」
『だからプログラムとして書かなくてよかったんだ』
「そゆこと」
『あれ、 DS_MODALFRAME ってなんだろ。そういえば Spy++ のスタイルにも
あるね』
「これはダイアログ専用のスタイル。さっきの CreateWindow() のを見ると」
『あったあった、 DS_3DLOOK とかが！　 DS_MODALFRAME もあるね』
「この辺はダイアログ専用のスタイル。こういうのもウィンドウスタイルの
中に含まれるから」
『へー。このページ見ると、ボタンのスタイルとかもあるんだね』
「ボタンとかのダイアログコントロールも」
『ウィンドウの一種、だよね。 Spy++ の照準合わせてっと、 BS_PUSHBUTTON
とかあるね』
「これも」
『プロパティで決められるの？　ダイアログエ……の前に、もう一度開き直
すのめんどいから FileTest.rc の中から探しとこっと』
「あ、意味ないよ」
『ええ〜？　あ、あった』

    PUSHBUTTON      "表示(&S)",IDC_BTN_SHOW,149,23,50,14

『ううっ、スタイルらしきものがない〜』
「でしょ、別にスタイル付いてないんだもの。一度閉じてダイアログエディ
タ開いて」
『ほい。んで【表示】ボタンのプロパティっと』
「【平面】にしてみて」
『ほい平面。あ、これするとボタンが真っ平らになるんだね』
「そしたら保存して」
『 FileTest.rc をテキスト形式で開くっと』

    PUSHBUTTON      "表示(&S)",IDC_BTN_SHOW,149,23,50,14,BS_FLAT

『おおお、ボタンのスタイルが付いた！』
「こんなふうに、ボタンもウィンドウの一種だから」
『スタイル付けられるんだ。……ふと思ったんだけど、もしかしてボタンと
かも CreateWindow() で作れるの？』
「作れるよ？　だから同じページに書いてあるんじゃない」
『そりゃそうだけど、でもボタンとかリストボックスとか、普通のウィンド
ウと見た目全然ちがうでしょ。そういうのもプログラムで』
「しなくても大丈夫。〈ウィンドウの原型〉ってあったでしょ」
『ウィンドウクラス！』
「同じ CreateWindow() のリファレンスに……」
『 BUTTON とか COMBOBOX あるね、そっか、ウィンドウクラスをこーゆーの
にすれば、ボタンとかができるんだ！』
「そゆこと」
『ってことは…… Spy++ で見てもちゃんとウィンドウクラスが Button と
か ListBox とかになってる！　大文字小文字は違うけど』
「その辺も含めて次回に続く！」


/*
    Preview Next Story!
*/
『なんかちょっと複雑。でも……』
「でも？」
『ちょっと中身分かってくると、なんか面白いかも』
「そう、そうなんだよ火美ちゃん！」
『な、なに？』
「色々分かってくるとプログラミングが楽しくてしょうがなくなるんだよ！」
『というわけで次回』
＜ Version 5.25 ボタンを作ろう！ ＞
「につづく！」
『ま、自分で色々できるようになるってのは楽しいけどね』
「……でも作業中のウィンドウを最小化するのはやめて……」


/*              ２００１年１月１５日（月）の更新予定              */
http://www.kab-studio.com/

・Codian に iostream を追加
　Codian に STL & iostream 入門から iostream の #15 - #18 を掲載。
今回は iostream のカスタマイズです！
[ Codian ]
http://www.kab-studio.com/Programing/Codian/


/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・プログラミングに関する質問は[鏑矢の憂鬱]にお送りください。
http://www.kab-studio.com/Programing/KabuU/
・購読登録を解除したいときにはこのページで行なってください。
＊http://www.mag2.com/m/0000012198.htm
＊http://www.pubzine.com/detail.asp?id=000590
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.com/Freeware/

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

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


/*                      See you next week!!                      */


