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

    KAB-studio.h


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

    送信日： 2002/04/01(Mon) No.151
    配信数： 3760 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                          祝・３周年！                          */

『今日、 KAB-studio.h は３周年！　４年目の春を迎えましたッ！！』
「いい報せと悪い報せがあります」
『いい報せからっ！』
「 #pragma twice はあと３年は続きます」
『それ悪い報せ〜』
「悪いゆーなー」
『じゃー悪い報せは？』
「４年目に入るけど、何も変わりません。新コーナーとかもなし」
『それはそれで悪くないんじゃ……』
「そうなのかな……」
『ぷらとわって、今年度はどんな感じ？』
「そうだね、今やってるウィンドウプロシージャとかが中心」
『そんなに教わることってあるの？』
「もちろん。ダイアログより普通のウィンドウの方が難しいから」
『そっかそっちの方もあるんだ』
「それと MFC の関連もね。これからも本当の力になること教えてくから」
『それが使えるようになるまでいつまでかかるのやら……』
「というわけで、これからも KAB-studio.k を」
『よろしくお願いしま〜す！』

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

・４月表紙壁紙登場！
　毎月恒例、新しい表紙壁紙です。お花見な火美ちゃんでいい感じです！　
ダウンロードは CG Gallery にて。
[ CG Gallery ]
http://www.kab-studio.com/CG/Gallery/


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

2002/03/24 (Sun)
　４月表紙壁紙。今回はかなりいい感じ〜。ちょっと手法変えたから。日経
ソフトウェアのとおり、 VC6 安定かも。そしてサイト構築の見積もり。人
月計算で。あんま参考になんない……。

2002/03/25 (Mon)
　検収して、新しいお仕事の話。それよりカレー(爆)。早く帰ってこられた
し。でも帰ってから必要な書類を書いたり。春休み特番が結構多い……。某
画集購入。絵柄だけで。

2002/03/26 (Tue)
　ドキュメント作成。死ぬほど眠い。さらに飲み会。うぃー。

2002/03/27 (Wed)
　昨日３時半に寝たんでさらに眠い。次のお仕事はかなり大変っつーか。も
もえサイズ２巻初回限定版を手に入れられず。テレビはシュガー最終回が良
かったです〜。

2002/03/28 (Thu)
　有休取ってパスポートを取得。結構あっさり。ももえサイズ２巻初回限定
版を思わぬ本屋で発見即ゲット。おねがい☆ティーチャー最終回(泣)。でも
やや詰め込み過ぎ？　DVD で？

2002/03/29 (Fri)
　疲れ取れてきたなー感。貫手。タスクマネージャっぽいコンソールアプリ
をぱぱっと作成。こーゆー仕事だけしたい。逮捕しちゃうぞスペシャルがあ
んま……。そして、おねてぃは１２回。

2002/03/30 (Sat)
　土曜だけど客先へ。いよいよサービスイン！　皆さんも使えます〜。しか
しなんとか形になって良かった。大変だった。っつーか次への展望とか。か
ぶヘッダー３周年。


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

■　第三章　きもち　−１４−

「左さんは、いつ頃復帰できるの？」
「先生はあと半月ほどだって言ってた」
「意外だね、まるで人間みたいだ。リシュネも、左さんのこと、人間だと思
う？」
　今度は、リシュネが黙る番だった。カプセルとカプセルの継ぎ目にあるス
テップにリシュネは乗り、スイッチを入れる。ステップは上がっていき、カ
プセルの上にあるスペースへと入っていく。
「質問を変えるよ。＜選ばれし者＞の君には、左さんは自分の正体を証さな
かったのかい？」
　少年は、追うように自分の前にあるステップへと乗って、上がっていっ
た。
「洋一が私に話してくれたことの中には、私が＜選ばれし者＞故の話もあ
る。それは当然、＜選ばれし者＞にしか話せないこと」
「僕にも？」
「もちろん」
　そうはっきり言って、カプセルの上の小さなスペースへとリシュネは入
る。照明がひとつしかないその部屋の中で、リシュネはボディスーツを脱ぎ
始めた。
「実際、その＜選ばれし者＞ってなんなの？　バージョンは僕の方が高いの
に」
　少年もカプセルの上の密室へと入り、ボディスーツを脱いで、指定された
バケットに投げ入れた。壁に取り付けられたパネルを操作すると、イスが現
れる。
「ディルトも、＜選ばれし者＞よ」
「なんだって！？」
　少年は一度座ったイスから立ち上がって叫んだ。リシュネはイスに座りな
がら、語った。
「私にも、＜選ばれし者＞がいったい何なのか、どういう意味があるのか、
なぜ私が選ばれたのか……洋一は、何も語ってくれない」
「僕達は、何のために存在しているんだろう」
　思わずリシュネは、声のする少年の方を向いた。
「僕達から見れば、助けてもらえたのは、確かにうれしい。けど、左さんか
ら見た僕達の存在意義、それは何なのだろうか……」
「洋一は、ファインダウト社のバックに何かがあると言っていた」
「確か、左さんはあそこには、どこかの企業から派遣されてきた、そう言っ
ていた」
「そこから離れて、ファインダウト社を作って、私達の面倒を見ている」
「こんな維持費の掛かるペットを飼って、どうしようっていうのかな」
「考えても仕方ないよ。私達は洋一に恩がある。それで十分よ」
　少年は、それほどの恩ではないと確信していた。が、洋一は裏切れても、
リシュネは裏切れなかった。
「そうだね……お休み」
「お休み」
　再びスイッチを押すと、イスは下がっていく。いつの間にか不透明になっ
ているガラスに包まれて、ふたりは目を閉じた。下から溢れてくる透明の液
体に身を沈ませる。
　いつの日か……夢さえも見ない眠りへと、ふたりはついた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『次の水曜は Java メルマガ！』
「次は〈第１５回  相互依存度を下げる〉です」
『そ、そーごいぞんど？』
「うん、そうだね……今までって、関数ってひとつかふたつだったでしょ」
『そんなもんね、多くても』
「でも、必要な機能をどんどん足していくと、関数やクラスが」
『どんどん増えていっちゃう』
「そういう場合、関数を呼び合ったりクラスを持ち合ったりします」
『持ち合うと？』
「お互いがお互いを知り過ぎちゃう」
『知り過ぎちゃいけないの？』
「そうなると、一方を修正すると」
『もう一方も修正しなきゃいけなくなる！』
「その修正の大変さが、相互依存度の高さってこと」
『わかったよーな、わかんないよーな』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 8.09
ダイアログを閉じてみる

「今回はいよいよ、ダイアログを閉じられるようにします」
『やっと、やっとね……今まであの押したくもない【デバッグの中止】ボタ
ンを何度押すハメになったことか……』
「確かにあれは押したくないね……でも、ボタン押したときにどうこうって
いうのはちょっと難しいから、まずはちょっと変な方法で閉じてみます」
『変？』
「ダイアログプロシージャをこう書き換えて」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_MOUSEMOVE )
    {
        if    (
                ( LOWORD( p_lParam ) == 0 )
            &&
                ( HIWORD( p_lParam ) == 0 )
            )
        {
            EndDialog( p_hDlgWnd, 100 );
        }
        return TRUE;
    }

    return FALSE;
}

『？？？』
「マウスカーソルが 0, 0 に来た時にダイアログが閉じるっていう」
『変！　変すぎ！』
「そ、そう？」
『なんかゲームみたい……それにやってみても閉じないし！』
「あ、マウスカーソルの位置はクライアントエリアのが返ってくるから」
『ってことはタイトルバーの下で、フレームの内側ね……あっ閉じた。やっ
ぱゲームね』
「クライアントエリアについては Version 7.02 ( No.122 ) を参照。で、
ここで重要なのは」
『 EndDialog() だよね。これでダイアログを閉じるの？』
「そう、この API で、第１引数に渡したウィンドウを閉じます」
『第２引数は？』
「この第２引数、実は DialogBox() の戻り値になるんです」
『そういえば全然触れてなかったね』
「 WinMain() の最後の return 0; でブレークポイントかけて」
『 iRet の値、ちゃんと 100 になってるね』
「これは実はちゃんとした使い道があるから、あとでそれを説明するね」
『ってゆーか、早くちゃんとボタンで閉じさせてよ！』
「じゃ、ダイアログプロシージャをこう書き換えて」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == IDOK )
        {
            // OK ボタンが押されました。
            EndDialog( p_hDlgWnd, IDOK );
            return TRUE;
        }
    }

    return FALSE;
}

『うお、 if が２重！』
「あとのことを考えてね」
『まず WM_COMMAND ってメッセージを拾うのね』
「このメッセージはその名の通り〈コマンド〉、ボタンが押されたりメ
ニューが選択されたりしたときに呼ばれます」
『便利そうな、そうじゃないような……』
「ま、ダイアログとの時はメニューないし、メニューある時はダイアログ
じゃないからそんなに気にする必要はないかな」
『で、また例によって WPARAM にはふたつの値がくっついて入ってるわけ
ね』
「 HIWORD には【通知コード】っていうのが入ってくるんだけど今回は使わ
ないからパス。 LOWORD には、押されたボタンの ID が入ってます」
『……ああ！　そっか、ダイアログエディタでボタンに付けた ID ！』
「そうだ、実行してキャンセルボタン押してみて」
『うん、効かないね。でも OK ボタンを押せば、ダイアログが閉じる！』
「このチェックを内側の if でしてるってこと」
『この仕組みを使えば、どのボタンを押したときにどの処理をする、ってい
うのを変えられるわけね……』
「そう。実際……もう一度実行して、右上の閉じるボタン押してみて」
『反応しないね』
「実はこのボタンを押すとキャンセルボタンを押したときと同じ状態になる
から」
『そっか、キャンセルボタンを押したときにも閉じるようにしなきゃいけな
いんだ』
「というわけで」

// ダイアログプロシージャ。
BOOL CALLBACK DialogProc
    ( HWND p_hDlgWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == IDOK )
        {
            // OK ボタンが押されました。
            EndDialog( p_hDlgWnd, IDOK );
            return TRUE;
        }
        else if( LOWORD( p_wParam ) == IDCANCEL )
        {
            // キャンセルボタンが押されました。
            EndDialog( p_hDlgWnd, IDCANCEL );
            return TRUE;
        }
    }
    return FALSE;
}

『おおっ、これならキャンセルボタンもペケボタンでも閉じられる！』
「この辺は普通に IDCANCEL にも対応させればいいだけだね」
『でもさ、これってちょっと無駄じゃない？　内側のふたつの if って一緒
にできそうだけど』
「してもいいし、しなくてもいいし。普通は OK とキャンセルって処理違う
でしょ」
『あ！　そっか、 IDOK の方は更新を反映させたりして、 IDCANCEL の方は
何もせずに閉じる、ってすればいいんだ』
「これで、ボタンそれぞれの処理に対応できるわけ。でも、これもしなくて
もいいんだよね」
『しなくてもいい？』
「 EndDialog() の解説で、第２引数が DialogBox() の戻り値になるって
言ったでしょ。これを使えばいいわけ」

// WinMain() 。
int WINAPI WinMain
    ( HINSTANCE p_hInstance
    , HINSTANCE p_hPrevInstance
    , LPSTR p_pchCmdLine
    , int p_iCmdShow
    )
{
    int iRet
        = DialogBox
            ( p_hInstance
            , MAKEINTRESOURCE( IDD_MAIN )
            , NULL
            , DialogProc
            );
    if( iRet == IDOK )
    {
        OutputDebugString( " OK が押されました。\n" );
    }
    else if( iRet == IDCANCEL )
    {
        OutputDebugString( "キャンセルが押されました。\n" );
    }

    return 0;
}

『 EndDialog() に IDOK を渡すか IDCANCEL を渡すかを変えれば、それが 
DialogBox() の戻り値になるからそれをチェックすればいいわけね〜』
「どっちかって言うとこっちの方が一般的かな。 MessageBox() はこの方法
だし、 CDialog::DoModal() もこの方法」
『 CDialog::DoModal() は Version 5.30 ( No.095 ) でやったね』
「 CDialog の方はダイアログプロシージャ側での処理もできるけどね」
『ってゆーか、どっちがいいの？』
「場合によりけりだけど、便利なのはダイアログプロシージャ側で処理する
方」
『なんで？』
「場合によってはダイアログを閉じさせたくない時ってあるからね。値が間
違ってたとか」
『そっか、ダイアログプロシージャなら、 EndDialog() を呼ばなきゃダイ
アログ閉じないけど、 DialogBox() の戻り値の方だと、もうダイアログ閉
じちゃってるからどうしようもないんだ』
「一番いけないのは処理を両方に分散させることかな。そういうことすると
混乱の元だから」
『バグの温床？』
「そゆこと」

/*
    Preview Next Story!
*/
『ダイアログ閉じるだけでもひと苦労ねー』
「メッセージ関係は MFC 使わないとかなり面倒かもね」
『ってことはさらに面倒に？』
「そう、特に通知メッセージ関係はね」
『つうちめっせーじ？』
「というわけで次回」
＜ Version 8.10 コマンドと通知メッセージ ＞
『につづく！』
「実際、この辺がなんとかなれば MFC なんて使わずに済むのに」
『…… MFC って悪者なの？』
「ぎく」


////////////////////////////////////////////////////////////////////
/*                  ２００２年４月８日（月）の更新                */
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 - 2002 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////

