////////////////////////////////////////////////////////////////////
/*

    KAB-studio.h


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

    送信日： 2003/02/03(Mon) No.192
    配信数： 3370 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

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

・毎月恒例、新しい表紙です！
　２月はやっぱりバレンタイン！　……バレンタイン？　まぁそんな感じ。
結構いい感じですよ？
　ダウンロードは CG Gallery にて。
[CG Gallery]
http://www.kab-studio.com/CG/Gallery/


////////////////////////////////////////////////////////////////////
/*                        ちょお普通な日記                        */
http://www.kab-studio.com/nikki2/

2003/01/26 (Sun)
　日曜日はうだうだ過ごす。マルチディスプレイでテレビ表示。ホイールが
トラックボールになるマウス。「甜茶」で花粉症対策。エクセルでおこづか
い帳。テレビはどれみ最終回とか。

2003/01/27 (Mon)
　８時半までお仕事。調子のいい週？　朝寒くて辛い。マルチディスプレイ
のゴーストはなぜか消えた。フォトショでマルチディスプレイの良さを実
感。全体を確認しつつはいいなぁ。

2003/01/28 (Tue)
　会社でかなり眠かった。 C++ を久々に。 CSV は std::vector と enum 
で。 WOLF'S RAIN がかなりいい感じ。アンプ買おうかなー。

2003/01/29 (Wed)
　C++ プログラムメイン。今日は結構調子いい？　幽白ＤＶＤ２８巻を唐突
に購入。２月表紙壁紙のラフを少しずつブラッシュアップ。

2003/01/30 (Thu)
　眠い。今週はヤバいかも。ＫＳＫの人と久々お話。「 UML 」の話とか。
描けなきゃって言っても。ビーフシチューポットパイが結構美味しい。

2003/01/31 (Fri)
　かなりギリギリ。人が減った（泣）。作りたい WEB システム。時間があ
れば作りたい。 Kanon アンソロコンプ目前。ぷらとわのストックが尽きか
け。

2003/02/01 (Sat)
　２月表紙壁紙。テーマは「恋はアジテーション」。今回はかなり苦労し
た。背景も火美ちゃんも。でも最終的にはかなりいい感じ？　午前中はＲ焼
きとか。午後はずっと表紙壁紙。なんかホントに疲れた……。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
http://www.kab-studio.com/Novel/Fuga/

■　第六章　帰郷　−６−

「……以上が今回の被害です」
　ブリーフィングルームには洋一、リシュネと少年、そしてディルトが座っ
ている。智子はノートのパッドに触れて画面を進めた。
「しかし、今回の問題は未曾有のものでした。私はこの建物のセキュリティ
は決して甘いものではないと考えます」
「……難しい状況だな」
　洋一は椅子に深々と座り、ため息を付いた。その膝には、おはるさんがい
つものように丸まっている。
「今回の件で、敵はさらに戦力を増強するだろう。政府も再び傾き始めた。
と言うよりは、その価値に気付き始めたと言った方がいいかな？」
「僕達の方に付けば、もっと利口にしてあげたのに」
「政府に全面戦争を挑むだけの戦力は、我々にはないと思います」
「確かに我々は無力だ。だが、彼らも、ある敵には無力だ」
「舞達？」
　洋一は首を振った。
「＜闇＞……ですね？」
「そう。闇の力はとてつもない。特に、ただ鈍重なだけの現行兵器ではまっ
たく歯が立たない」
「でも、＜泉の力を受け継ぐもの＞は勝てるんでしょ？」
「ミナクートは壊滅を逃れるためのプロテクトの一種として弱点を常に作っ
ていたんだ。それが……というわけさ」
　新しい情報に慣れていると言っても、その底知れなさは奇妙であり驚異で
もあった。
「んじゃ、作戦を決める。リシュネと君は＜闇＞について調査してくれ。う
まく利用できないか、とかね」
「え……」
　それは、舞の故郷に行っていいことを意味していた。
「寄り道せずにちゃんと帰ってくるんだぞ。これ以上先生を困らせるな？」
「リシュネはいいんだけど、君はねぇ」
「うるさいなぁ」
「ディルトは牽制攻撃をしてもらう。こっちだってただやられてるだけじゃ
ないってことを示さなければね」
「全滅させてはいけないということだな」
「つまんないの、あんなヤツらみんな殺しちゃえばいいのに」
「窮鼠猫を噛む、だ。しかも、かわいいネズミさんは猫の後ろにいる熊に気
付かないみたいだからな」
「じゃぁ、その熊に僕らも踏みつぶされちゃいますね」
「かもな」
　不意に襲った沈黙が、緊張を作りだした。僕らも、闇に……？
「んじゃ、ブリーフィングはこれで終了。今日はメンテを受けて、ゆっくり
休むように」
　おのおのが立ち上がり、部屋を出ていく。ＯＳを閉じている智子に洋一は
そっと近付いた。
「鳳<FONT SIZE=1>（おおとり）</FONT>夫妻は安定まであとどのくらいかか
る？」
「あと三ヶ月は……このバージョンで胚と成人では雲泥の差がありますか
ら」
「……辛い戦いが、続きそうだな」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『はい、水希ちゃん』
「あ、チョコだね、ありかど」
『義理だけど』
「う、うん、ありがとう」
『でもね、こっちは義理じゃないから……』
　ぱちん、ぱちん、ぱちん……
「ど、どうしたの、ボタンなんか外して……」
『とゆー感じの表紙壁紙だよーん、今月は』
「ってそんなオチのために男の純情弄ぶなんて〜」
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 10.14
MFC との違い・ポップアップメニュー編

「前回は、ポップアップメニューを表示するために次のように右クリック時
の関数を修正しました」

// 右クリックされました。
LRESULT OnRButtonUp
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    // 画面上のマウスカーソルの位置を取得します。
    POINT stPoint;
    GetCursorPos( &stPoint );
    // メニューバーを読み込みます。
    HMENU hMenuBar
         = LoadMenu
            ( GetModuleHandle( NULL )
            , MAKEINTRESOURCE( IDM_MAIN )
            );
    // サブメニューを取得します。
    HMENU hSubMenu
        = GetSubMenu( hMenuBar, 0 );
    // ポップアップメニューを表示します。
    TrackPopupMenu
        ( hSubMenu
        , TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON
        , stPoint.x
        , stPoint.y
        , 0
        , p_hWnd
        , NULL
        );

    return 0;
}

『長い……けど、ひとつの関数を何行も書いてるからそう見えるだけかな』
「それだけ引数が多いってことだから複雑なのにはかわりないけどね」
『げ、そういえば……』
「さて、これをひとつひとつ解説していきます。と、これの元になった 
Version 9.05 ( No.166 ) の方も見ておいてください」
『つまり、あっちは CMenu を使ってて、こっちは HMENU を使ってるわけよ
ね』
「そう、 CMenu は MFC のクラス。でも今は SDK だけで作っているから 
MFC は使えない、というわけで CMenu の代わりに HMENU を使います」
『質問！　MFC の CMenu だけ使うってことはできないの？』
「できなくはないけど、かなり面倒だし難しいからやめておいた方がいい
よ」
『そういうもんなんだ』
「実際、 CMenu はそれほど便利じゃないからいいんだけど、 CString とか
便利なものは SDK だけの時も使いたかったりするんだよね……」
『 CString って文字列入れるクラスだよね』
「そう。これがあるのとないのとでは結構な差が……と、その辺は次の章ま
で取っておくとして。ではさっそくひとつひとつ見ていきます」

    // 画面上のマウスカーソルの位置を取得します。
    POINT stPoint;
    GetCursorPos( &stPoint );

「これは今あるカーソルの位置を取得してます。 POINT は〈点〉を入れる
ための構造体」
『 POINT って CPoint とどう違うの？』
「 RECT と CRect の関係と同じ」
『あー、 Version 7.07 ( No.127 ) で言ってたのだね。ってことは同じも
のって考えちゃっていいんだ』
「うん、だから同じように GetCursorPos() に渡してるしね。では次」

    // メニューバーを読み込みます。
    HMENU hMenuBar
         = LoadMenu
            ( GetModuleHandle( NULL )
            , MAKEINTRESOURCE( IDM_MAIN )
            );

『これって CMenu 使ってた時のとまったく違うよね』
「あの時は、ウィンドウのメニューバーを取得してたけど、今回はリソース
から直接読み込んでるから。ちなみに LoadMenu() に関しては
Version 10.09 ( No.187 ) を参照」
『あ、そっか、今のメニューバーをセットするときにもこれ使ってたんだ
ね。……あれ？？　GetModuleHandle() って？』
「これはインスタンスハンドルを取得するための API 。これに NULL を渡
すと自分のインスタンスハンドル、つまり WinMain() の第１引数のが得ら
れるから。これは便利だから憶えておいて」
『……質問質問質問！！　じゃあ Version 10.10 ( No.188 ) で 
MessageLoop() にわざわざインスタンスハンドル渡してたのはなんで？？』
「いや、別にどっちでもいいんだけどね。その他にも、グローバル変数に入
れておいてそれを使うって方法もあるし」
『……結局どれが一番いいの？』
「一番確実でどこからでも取れる GetModuleHandle() がいいと思うよ」
『じゃあやっぱり MessageLoop() の引数で渡すことなかったじゃん』
「まぁ、そうかも……さて次」
『あ』

    // サブメニューを取得します。
    HMENU hSubMenu
        = GetSubMenu( hMenuBar, 0 );

「これはそのまま API に置き換えただけ」
『んーと、受け取るのを CMenu のポインタから HMENU に変えて、あとメ
ニューのハンドルを第１引数に渡してるんだね』
「これは前のと比べてみようか」

    // 「ファイル」サブメニューを取得します。
    CMenu *pcFileMenu
        = pcMenuBar->GetSubMenu( 0 );

「 CMenu::GetSubMenu() ってメンバ関数を呼んでたのを GetSubMenu() っ
て API を呼ぶように変えたんだけど」
『どうやって変えるのかっていうのはなんとなくわかるんだけど、でも、自
分で変えようとしたらちょっと難しいかも』
「だったら、実際に CMenu::GetSubMenu() のソースを見るって手もあるか
も」
『あ、 MFC って全部ソースがあるんだもんね』
「しかも MFC のほとんどは API をそのまま呼んでるだけだから。このメン
バ関数なら AfxWin1.inl ってファイルにあるから」
『えーっと……む、ちょっと難しいかも』
「まぁ呼び出してる部分だけ抜き出すと」

::GetSubMenu(m_hMenu, nPos)

「って感じ。 m_hMenu は CMenu が中に持ってるメニューハンドル」
『つまりこのメニューハンドルを直に HMENU って感じに渡せばいいってこ
と……でいいんだよね』
「うん、そうなるかな。この辺は色々やって慣れるのもいいかも。ちゃんと
教えられるのはもう少し先になっちゃうし」
『げ、そうなの？』
「他に教えることが結構あるから……。さて、最後」

    // ポップアップメニューを表示します。
    TrackPopupMenu
        ( hSubMenu
        , TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON
        , stPoint.x
        , stPoint.y
        , 0
        , p_hWnd
        , NULL
        );

『これもメニューハンドルを直接渡してるわけね』
「これも前のと比べると」

    // ポップアップメニューを表示します。
    pcFileMenu->TrackPopupMenu
        ( TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON
        , cPoint.x
        , cPoint.y
        , pcMainFrameWnd
        );

『あれ？　かなり短いね』
「いくつか省略されてるからね。えっと、まず API の方の５番目の引数」
『 0 渡してるね』
「これは今は使われてなくて、将来は使うかもしれない引数」
『へー、そんなのあるんだ』
「って言っても、まず使われないだろうけど」
『なんだー』
「 API にはそういうの結構あるから。リファレンスには 0 を渡してくださ
いって書いてあるからそのまま 0 を渡します」
『６番目の引数は、 API のはウィンドウプロシージャが受け取ったウィン
ドウハンドルだね。そういえば、前の例の方は、なんか面倒なことしてたよ
うな……』
「フレームウィンドウのポインタを渡していたからね。というより」
『というより？』
「 SDK だけのって、ビューウィンドウは作ってないでしょ」
『あ！　そういえば。それってなんで？』
「面倒だから」
『……それだけ？』
「今のところはね。ちゃんとしたアプリを作ろうってことになったら必要だ
から。今のままだとグレーのままだしね」
『でも、ウィンドウが増えたらウィンドウプロシージャも増えるわけで……
結構混乱するねー』
「って言っても、 MFC が肩代わりしてただけだけどね」
『そうだけどー』
「と、話を戻して」
『７番目の引数は…… NULL 渡してるね』
「これは、メニューの外をクリックしてもメニューが消えないようにするた
めの引数」
『……それってなんの意味があるの？』
「さぁ……それに試してもうまく機能しないし……で、そういう機能が必要
ないときは NULL を渡します」
『で、なんで CMenu の方は渡してないの？』
「引数としてはちゃんとあるんだけど、省略してるから。リファレンスには
こう書かれてるでしょ」

BOOL TrackPopupMenu
    ( UINT nFlags, int x, int y, CWnd* pWnd
    , LPCRECT lpRect = NULL 
    );

「この = NULL っていうのは、その引数を省略すると NULL が渡されるって
こと。 Version 8.11 ( No.153 ) とかでやったでしょ」
『あー、あれと同じなんだ』
「で、 Version 5.11 ( No.076 ) でも触れたけど、この省略機能は C++ の
もの。 API は C 言語時代のものだから」
『省略機能はないわけね。面倒〜』
「実際、 MFC の便利な部分の多くは省略機能かも」
『なんだかんだ言って、やっぱ MFC の方が便利だよね』
「それはそうだね……」

/*
    Preview Next Story!
*/
『って、認めちゃっていいの？』
「便利なのは便利だし。次回のステータスバーも」
『そういえばステータスバーって最初っからあるもんね』
「そういうのも自分でしなきゃいけないのは大変かな」
『大変なのはヤダなー』
「でも仕組みを知るためにも、一から作るのは重要だよ？」
『重要って言われても〜』
「というわけで次回」
＜ Version 10.15 ステータスバーを作ってみよう！ ＞
『につづく！』
「作るのは結構面白いよ？」
『面白いって言われても〜』


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

・更新なしかも……
　まぁ、ほとはーを追加できたらやや奇跡気味ってことで……。


////////////////////////////////////////////////////////////////////
/*                          ご注意！！                            */

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.com/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
＊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/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.com/Info/MailMagazine/

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

