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

    KAB-studio.h


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

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

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

・ホットハーブに２話追加！
　三人合体ホットハーブに２話追加します！　前回に引き続きパプリカ大活
躍！
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/

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

2002/06/30 (Sun)
　ブラジル優勝！　ま、日本はまだまだだったってことで。ぷらとわ３話作
成。アクセラレーターの記事が間違ってた（汗）。なんかほろっと。ワール
ドカップ関連の録画は「カッコイイ映像」目当て。

2002/07/01 (Mon)
　ソルパック月例会議。ダイアログクラスを作成。 KTL のチェーンパター
ンって良くない？　かぶスタ７周年。これからもかぶスタはコミック系にシ
フトしていくんで諦めてね（爆）。

2002/07/02 (Tue)
　お仕事はライブラリの整理。あと Java のデバッグ。ライブラリに詳しく
ないのがねー。 iDisk 加入。そしてあご。意外と気にならないです。

2002/07/03 (Wed)
　蜂蜜まき散らし。お仕事はサーブレットデバッグ。 flush() が原因？　
初期パラメーターの渡し方難しかった。でもなんとかなるもんだなぁ。ハン
ズでくじら君購入。テレビは ROBIN がいい感じ。

2002/07/04 (Thu)
　お仕事はライブラリまわりが充実。 KTL と違って実践的。テレビはまお
ちゃんに注目？　柔軟がんばってます。１８０度に開く日も近い？

2002/07/05 (Fri)
　お仕事はツール作成。規模が大きくなってくるとちょっと大変。帰りに公
園経由でぐるーっと散歩。途中でビデオ３本購入。帰ってからはウイイレ対
戦。点は取れるけど……。

2002/07/06 (Sat)
　今日は早起きするハメに。ほとはーのラフや２の５、ぷらとわ１話とかな
りがんばりました。夢がなにげに嫌……。テレビは、やっぱ Kanon いいな
あと。ほとはーのテンプレート。


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

■　第四章　ふたりの勇者　−１１−

　マンションの前で雅樹は待っていた。
「よっ。行くか？」
　舞は静かにうなずいた。
　平日の電車は、空いていた。見慣れない風景が流れていくのを見て、自分
は異世界へと行くのではないかと感じた。子供が遠くで笑っている。ひとり
分の席を空けて隣に座る雅樹は、口を開こうとはしなかった。
「どうしたの？　黙ってて……」
「……」
　雅樹は寝ていた。
　こいつは……と思いながらも、舞は自分も寝ることにした。暖かい日差し
は眠気を誘う。おまけに昨日はよく眠れなかった。穂香さんがもし存在する
のなら、駅に近づいたところで雅樹を起こしてくれるはずだと考えた。
　いないと思いながらも頼る自分を変なヤツだと思いながら、舞はまどろん
だ。
「……舞」
　肩を揺すられて舞は起きた。あくびをしながら雅樹のあとをついていく。
駅を出て、しばらく歩けば、前に来た公園へと出る。
　リシュネという少女が蹴り崩した部分はそのままになっていて、周りに
ロープが張られ、「危険」と書かれた紙が貼られていた。
　クラクションが鳴る。振り向けば、そこには大きめのバンがあった。運転
席から顔を出す男を、舞はしっている顔だと気付いた。
「怪我、治ったんだ……」
　洋一はわざわざ運転席から出て、後ろの扉を開いた。
「ここから場所を移したいんだが、どうかな？」
　舞は雅樹を見、雅樹は穂香（がいるであろう場所）を見、それから舞を見
て言う。
「大丈夫だろ、多分」
「まぁ、虎穴にいらずんばって言うし……え？？」
　乗り込もうとしたとき、目に入ったふたり。後ろ側の席に少年とリシュネ
が座っていた。ふたりは「マジかよ」と言いたげな目で洋一を見た。
「僕がふたりの面倒を見ている。僕が何かされない限り何もしないだろう
し、もししたとしても君達はすぐ後ろにいるこの僕をいつでも殺せるってわ
けさ」
「そういう問題じゃないんだけど……」
　舞はふたりを見た。少年は前に出遭ったときと同じ自信満々の笑みを浮か
べていた。リシュネも同じように、すました表情を見せていた。
　ふしぎと、リシュネから受ける雰囲気はそれほど悪くないと感じた。だか
ら、舞は乗り込んだ。それなりにゆったりとした空間で、四人は向かい合っ
て座った。
「では、行くとしますか」
　洋一の運転で車は走り出す。舞は何か話した方がいいのか、何を話せばい
いのか迷っていた。できれば目の前の少女が話しかけてくれれば、なんてい
う他力本願な思いを持っていた。
「ああん？」
　唐突に上がる雅樹の声。雅樹は窓の外を向いていたが、普通に聞こえる声
で穂香と話していた。少年とリシュネは何事かという目を向け、舞は苦笑い
さえ浮かばなかった。
「ん、解った」
　そう言ってから、雅樹はふたりの方へと向き、にっこりと笑った。何度目
かの「穂香の紹介シーン」を見せられるのかと思うと、舞は涙さえ出そうに
なった。
　こんな緊張した状態だっていうのに……。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
「ホットハーブ、毎週更新モードみたいだね」
『そういえば、普通のマンガって難しいのかな』
「コマ割りマンガってこと？」
『そうそれ。時間が掛かるってのはわかるけど』
「１週間に４コマ２つ、普通のマンガだと１話にかなり時間かかるね」
『それはともかく、スキル的な問題ってあるのかな』
「なんでも……気力が続かないって話が」
『気力が続かない！？』
「４コマって、１コマ描き上げればそれで一段落でしょ」
『うん』
「普通のマンガって、クライマックスまでって結構あるから……」
『描くのつまんなくなっちゃうとか？』
「そんな噂も」
『う”ー、根性なさ過ぎ！』
「火美ちゃんも４コマ出ればいいのに」
『あたしは４コマはイヤなの！！』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 9.04
メニューの構造

「前回はメニューにアイテムを追加してみました」
『でも、追加したのってメニューバーにだよね。なんか違うよーな』
「だね、だから今回は【ファイル】サブメニューの中に追加してみます」
『って感じに別にするってことは、ちょっと難しいってこと？』
「っていうよりはちょっと複雑ってくらい。ま、まずはコードから」

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// 略。

    // メニューバーを取得します。
    CMenu *pcMenuBar = GetMenu();
    // 【ファイル】サブメニューを取得します。
    CMenu *pcFileMenu = pcMenuBar->GetSubMenu( 0 );
    // メニューアイテムをインサートします。
    pcFileMenu->InsertMenu
        ( -1
        , MF_BYPOSITION | MF_STRING
        , ID_FILE_OPEN
        , "ファイルを開く（&O)"
        );

    return 0;
}

『あんま違わないね』
「だね、一番の違いは」

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

「の行が追加されてること」
『わざわざそんなことしてる理由は？』
「最初に CWnd::GetMenu() で取得したメニュー」
『 pcMenuBar ね』
「これは、メニューバーだけ。つまり【ファイル】サブメニューや【編集】
サブメニューは含まれてません」
『横一列だけってことね』
「だから、このメニューバーから【ファイル】サブメニューを取得する必要
があるんです」
『それが CMenu::GetSubMenu() なわけね。 0 は最初の、つまり【ファイ
ル】サブメニューのってこと？』
「そゆこと。それで取得した pcFileMenu が【ファイル】サブメニュー一列
分」
『一列分……そっか、 CMenu はメニューバーもポップアップメニューも、
一列ずつだけなんだ』
「そう、だからもし【ファイル】サブメニューにさらにサブメニューがあっ
たら」
『 CMenu::GetSubMenu() でその位置を指定して、また CMenu のポインタ受
け取って、ってなるわけね』
「そういう仕組みになってるから、 CMenu::GetSubMenu() や 
CMenu::InsertMenu() で位置を指定するのが簡単になってるかな。メニュー
全体だと」
『かなり大変そうね。そういえば、次の CMenu::InsertMenu() のとこも』

    pcFileMenu->InsertMenu

『って、その pcFileMenu になってるね』
「アイテムを追加したいサブメニューで CMenu::InsertMenu() を呼べば」
『そのサブメニューに追加されるわけね』
「ちなみに CMenu::InsertMenu() の第１引数に -1 を渡してるから」
『ホントだ。 -1 だと最後に追加なんだよね。あ、ビルドして実行っと。う
ん、最後に追加されてる』
「こんな感じに、メニューは一列ごとに管理されてるってことを解ってもら
えればいいかな」
『これって、 CMenu のじゃないんだよね』
「そう、 MFC のじゃなくて、ウィンドウズのシステムとしてそうなってる
から。だから HMENU を直接使ってもこうなるからね」
『その辺はいつものパターンね』
「さて、今のをもう少し理解してもらうために、今度はメニューを作ってみ
ます」
『メニューを作る！』

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// 略。

    // 新しくサブメニューを作成します。
    CMenu cNewSubMenu;
    cNewSubMenu.CreatePopupMenu();
    cNewSubMenu.InsertMenu
        ( -1
        , MF_BYPOSITION | MF_STRING
        , ID_FILE_OPEN
        , "ファイルを開く（&O)"
        );

    // メニューバーを取得します。
    CMenu *pcMenuBar = GetMenu();
    pcMenuBar->InsertMenu
        ( -1
        , MF_BYPOSITION | MF_STRING | MF_POPUP
        , (UINT)( cNewSubMenu.GetSafeHmenu() )
        , "新規サブメニュー (&N)"
        );

    // CMenu の管理から解放します。
    cNewSubMenu.Detach();

    return 0;
}

『って、さっきとあんまり違わないね。えっと、まず最初に……今度はポイ
ンタじゃない CMenu を作ってるね』
「元々あるメニューじゃない、新しいメニューを作るからね」
『で、 CMenu::CreatePopupMenu() 、これでメニューを作ってるんだ』
「あ、そうそう、 CMenu のメンバ関数一覧って見てみて」
『ほい。あ、 CMenu::CreateMenu() ってのもあるなんで Create なのがふ
たつもあんの？』
「それは」

CreateMenu()      : メニューバーを作る
CreatePopupMenu() : ポップアップメニュー（サブメニュー）を作る

「ってこと」
『なるほど、メニューバーとポップアップメニューは作り方も違うんだ』
「この辺も別物ってことだね。そのあと、いつもの CMenu::InsertMenu() 
でメニューアイテムを追加します」
『この辺は同じね』
「で、この時点ではこのポップアップメニューはまだ表示されないから、こ
れをメニューのサブメニューとしてくっつける必要があります」
『それがそのあとのところね。えっと、次の CWnd::GetMenu() でメニュー
バー拾って、そのあとの』

    pcMenuBar->InsertMenu
        ( -1
        , MF_BYPOSITION | MF_STRING | MF_POPUP
        , (UINT)( cNewSubMenu.GetSafeHmenu() )
        , "新規サブメニュー (&N)"
        );

『 MF_POPUP ってフラグ、ポップアップメニューってこと？』
「そゆこと。この CMenu::InsertMenu() で、次のサブメニューを表示させ
るメニューアイテムを追加してます」
『サブメニューを追加するんじゃなくて、メニューアイテムを追加す
る……』
「 Version 9.02 ( No.163 ) の【ポップアップ】がオンになったメニュー
アイテムを追加するってこと。で、第３引数で」
『さっき作ったメニューのハンドル渡してるんだね』
「普段は ID を渡すんだけど、サブメニューをくっつける場合にはここにそ
のメニューハンドルを渡します」
『なんかキャストしてるしちょっとヤな感じ……』
「確かにね。 CMenu のポインタを渡せるようにしてくれるとよかったんだ
けど」
『で……えーっとまとめると、メニューバーの最後にアイテムを追加して、
そのアイテムは【ポップアップ】で、そこにさっき作ったポップメニューを
くっつけるために、そのメニューのハンドルを渡してるわけね』
「ちょっと混乱するかもね」
『まー慣れれば大丈夫かな。と、最後の』

    // CMenu の管理から解放します。
    cNewSubMenu.Detach();

『ってなに？』
「あ、その前にビルドして実行してみて」
『ほい。うん、メニューバーの最後に【新規サブメニュー】が追加されて、
それを選ぶと……おお、ちゃんと新しく作ったサブメニューが！　アイテム
ひとつだから見栄え悪いけど』
「これが普通の動作。で、上の CMenu::Detach() 呼んでるところをコメン
トアウトすると」
『ビルドして実行。あら、選んだらエラーになっちゃった』
「これは、せっかく作ってくっつけたポップアップメニューが削除されてる
から」
『あ！　そうよ！　だって cNewSubMenu ってポインタじゃないじゃん、消
えるときに持ってるメニュー消しちゃうじゃない』
「そう、だから」
『 CMenu::Detach() 呼んで、消さないようにしてるわけね。でも……なん
か変くない？』
「だね、普通はこの cNewSubMenu を CMainFrame のメンバ変数にするだろ
うし」
『それならずっとあるから大丈夫なわけね』
「まぁ僕なら CMenu 使わないけど」
『 HMENU 直接なら、削除される心配もないわけね』
「必要な時に GetMenu() とかでいつでも取得できるしね。最後に、さっき
言ったメニューバーとポップアップメニューの違いを見ておこうか」

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// 略。

    // 新しくサブメニューを作成します。
    CMenu cNewSubMenu;
    cNewSubMenu.CreatePopupMenu();
    cNewSubMenu.InsertMenu
        ( -1
        , MF_BYPOSITION | MF_STRING
        , ID_FILE_OPEN
        , "ファイルを開く（&O)"
        );

    // メニューバーにくっつけます
    SetMenu( &cNewSubMenu );

    // CMenu の管理から解放します。
    cNewSubMenu.Detach();

    return 0;
}

「メニューバーにメニューをセットするときは CWnd::SetMenu() を使いま
す。すると」
『げ、メニューバーが変！　また透けてるみたい！　しかも固まってるし』
「というわけで使えなくなります。ちなみに CreatePopupMenu() のところ
を CreateMenu() に変えれば」
『あ、今度は大丈夫』
「というわけ。もちろん、今度はポップアップメニューとしては使えないけ
どね」

/*
    Preview Next Story!
*/
『ポップアップメニューとメニューバー、ねぇ』
「でも聞けばそんなに難しくないでしょ」
『訊けばね』
「でもここからは聞いてもちょっと複雑かも」
『げげ』
「というわけで次回」
＜ Version 9.05 右クリックメニューを表示する！ ＞
『につづく！』
「でも右クリックメニュー自体は結構面白いかもね」
『じゃーその面白いとこだけする！』
「じゃあプログラミングする意味ないじゃない」


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

・ホットハーブに１話追加予定。
　三人合体ホットハーブに１話追加予定です。今のところ暇だし（爆）。
[ 三人合体ホットハーブ ]
http://www.kab-studio.com/Comic/HotHerb/


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

