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

    KAB-studio.h


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

    送信日： 2002/07/01(Mon) No.164
    配信数： 3740 ( 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/

2002/06/23 (Sun)
　ぷらとわ１話と表紙壁紙のラフ。ハダカでいいですか？　スーパーで金が
全然なかった！！　午後はぐたーっと。時差ぼけな感じ。テレビはハリケン
ジャーがいい感じの展開に。

2002/06/24 (Mon)
　かなり眠い。トレーニングのしすぎかも。仕事はプロジェクトを離れたん
でツール作り。雲のように風のように、あずまんが大王短編映画、そしてテ
レビ版 Kanon 。 Kanon 、えーなー……。香料事件ってプログラム業界にも
言えるよーな。ホットハーブ人気高し。

2002/06/25 (Tue)
　仕事はライブラリ化とドキュメント作り。先月出費多すぎ。旅行とかモニ
ターとかゲームとか。でも SSW とかの購入は控えるかも。表紙壁紙を
ちょっとだけ。

2002/06/26 (Wed)
　眠い。ドキュメント作成だから？　筋トレをしたから？　ちょっと体重落
としたい。 CD-R 買ってジャッキーズキッチン寄って。モニターがなんか不
安定（汗）。絵を毎日描くっていいなぁ。

2002/06/27 (Thu)
　背景がうまくいかない〜。せっかく火美ちゃんがうまくいったのに。時間
かけないし、絵柄固定できてないし。もっと描き込まなきゃだめかも。お仕
事はドキュメント作成とツール。藍より青しは次回予告に注目。

2002/06/28 (Fri)
　表紙壁紙！　背景は昔使ってたソフトパステルっぽいのにしました。キャ
ラの絵と親和性高い？　ぽしゃった方もあります。お仕事はずっとドキュメ
ント作成。腱鞘炎ってみなさんなってます？

2002/06/29 (Sat)
　今年も半年経ったってことで CD-R に大バックアップ大会。朝はのんびり
して、かぶヘッダーの準備してから。何枚にも分けてになるけど、コストが
安いのがいい。ウイイレ、結局デフォルトのフォーメーションに戻すこと
に。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.03
メニューを操作しよう！

「今回は、実際にプログラム側でメニューを操作します」
『おー。でも、難しい？』
「火美ちゃんはどう想像してる？」
『んー、前にツリービューコントロールみたいだって言ってた気がするし、
似たような感じなんじゃないの？』
「操作自体は似てないけど、でも同じ感じかもね。だから大丈夫だと思う
よ。じゃあ、まずは…… CMainFrame::OnCreate() ってメンバ関数があるで
しょ、それを表示して」
『ほいほいほい。 ClassView でダブルクリックしてっと』
「メニューはフレームウィンドウに着いているものだから、 SDI の場合に
はメニューの操作はフレームウィンドウでするのが普通ってことで、フレー
ムウィンドウのメンバ関数でします」
『？　〈 SDI の場合〉ってことは、 MDI の場合には違うの？』
「うん、 MDI の場合にはひとつのウィンドウの中にいっぱいファイルを開
けるでしょ」
『専門用語でいうとこのドキュメントね』
「そうそう。そのドキュメントごとに違うメニューを用意できるんだよね」
『へー』
「だから SDI の場合の話ってことで。で、これからするのは、最初にメ
ニューアイテムを追加するっていうもの」
『それってつまり、リソースの方を操作しないで、プログラムでってこと
ね』
「もちろん」
『 InitDialog() でツリービューコントロールにアイテム追加したようなの
と同じってことだよね』
「そうそう、それと同じこと。でも、ダイアログじゃないから微妙に違って
きます。まず、 CDialog::InitDialog() じゃなくて、 
CMainFrame::OnCreate() で追加します」
『ウィンドウが作られる直前に呼ばれるのがそれなのね』
「一応ひと通り見ておくと……」

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;

    if (!m_wndToolBar.CreateEx
        (this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY
        | CBRS_SIZE_DYNAMIC) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // 作成に失敗
    }

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Failed to create status bar\n");
        return -1;      // 作成に失敗
    }

    // TODO: ツール バーをドッキング可能にしない場合は以下の３行を削
    //       除してください。
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    EnableDocking(CBRS_ALIGN_ANY);
    DockControlBar(&m_wndToolBar);

    return 0;
}

『これって最初からあったコードだよね』
「そう、 AppWizard が用意してくれたコード。今回は深くは見ていかない
けど、なんとなくわかるでしょ？」
『うん、ツールバーとステータスバー作ってるみたいだね』
「ツールバーもステータスバーも、こういう形でプログラムとして書かれて
るから作られて操作できるってことだね」
『いつかはあたしも、ってヤツ？』
「まーね。さて、この return 0 の直前に、こういうコードを追加して」

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

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

    return 0;
}

『お、メニューっぽい。ん？　CMenu ってことは、 MFC のクラス？』
「そう、いつも通り SDK だけでも MFC 使ってもメニューを操作できるけ
ど、まずは MFC 使って簡単に操作してみます」
『いつものパターンね』
「まず、 CWnd::GetMenu() でメニューバーを指す CMenu へのポインタを取
得します」
『あ、これは CWnd のメンバ関数なんだ』
「 API 版もあるけど、その場合にはメニューバーを持ってるウィンドウの
ハンドルを渡します」
『この場合にはフレームウィンドウね』
「それに、戻り値も HMENU っていう、メニューのハンドルが返ってきま
す」
『 MFC だと CMenu のポインタなのね。あれ？　なんでポインタなんだっ
け』
「 Version 7.03 ( No.123 ) を思い出して。 CMenu も CDC とか CWnd と
かと同じで中にハンドルを持ってるから」
『 HMENU ね。そっか。 CMenu 自体が返ってくるとそれが消えたら中の 
CMenu そのものもなくなっちゃうから……メニューがなくなっちゃう？』
「あとでそれ試してみようか、実際になくなっちゃうから」
『なくなっちゃうと困るからポインタが返ってくるわけね。で、そのポイン
タで…… CMenu::InsertItem() ってメンバ関数でメニューアイテムを追加
するわけね』
「そうそう。この辺の感覚は」
『ツリービューコントロールとかと似てるかも』
「それぞれの引数について見ておこうか。まず」

        ( 0

「は、メニューアイテムを挿入する位置」
『 0 だと先頭？』
「そう。この辺は他のと統一されてないからややこしくて、最後に追加する
ときは -1 を渡すって決まりになってます」
『ホント、ややこしい……。次の』

        , MF_BYPOSITION | MF_STRING

『はフラグね』
「 MF_BYPOSITION は、第１引数の意味を決めるもの。実は、位置じゃなく
て ID でどこに挿入するかを決めることができるんです」
『 ID ？』
「メニューアイテムの。 ID_FILE_OPEN とかのこと」
『あー。でもそれって分かりにくくない？』
「そう思うよ。だからあまり使わないと思う……。もうひとつの MF_STRING 
は、今度は第４引数の意味を決めるので、メニューアイテムの文字列を渡す
っていう意味」
『……それも、それ以外って思い付かないんだけど……』
「前に【オーナードロー】って教えたことあるでしょ」
『 Version 7.17 ( No.137 ) ね。あ、そっか、オーナードローだと自分で
文を書かなきゃいけないから』
「第４引数で渡す文字列が関係なくなって、代わりの他のものを渡さなきゃ
いけなくなるってこと。ま、それは今回はぱす。あと MF_SEPARATOR を渡す
と」
『あ、セパレーターってことは横棒ね。そりゃ文字列関係ないね……』
「そゆこと。第３引数の」

        , ID_FILE_OPEN

『これはさっき言ってたメニューアイテムの ID ね』
「そう、今回はテストってことで【ファイルを開く】の ID と同じものを指
定します」
『追加したメニューを選んだらファイルダイアログが出るってわけね』
「そゆこと。最後の」

        , "ファイルを開く（&O)"

『これがメニューアイテムに出ると。ここで、ニーモニックとやらも指定で
きるわけね』
「この辺はリソースで操作するときと同じだから」
『んじゃ実行！　おー、メニューバーの最初に【ファイルを開く（O)】が
入ってる！　選ぶとファイルダイアログが出る！』
「って感じに、結構簡単にメニューアイテムは追加できるわけです」
『ホント、結構簡単。構造体とか使わないし』
「けど」
『けど？』
「と、それは次回に持ち越し。最後にメニューを消しちゃうっていうのを見
ておきましょう」
『さっき言ってたのね』
「今のメニュー取得とインサートのところを、次のコードに置き換えて」

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

    CMenu *pcMenuBar = GetMenu();
    CMenu cDeleteMenu;
    cDeleteMenu.Attach( pcMenuBar->GetSafeHmenu() );

    return 0;
}

『んーと、最初の１行はさっきと同じね。次が、ポインタじゃない CMenu 
を作って、最後に CMenu::Attach() でメニューハンドル持たせるわけね』
「メニューハンドルの取得は CMenu::GetSafeHmenu() でできるから」
『 CWnd::GetSafeHwnd() のメニュー版ね。で、このまま放っておけば、自
動的にメニューハンドルが削除されちゃうわけね』
「じゃ、実際に試してみて」
『ほい。うわぁ！！　タイトルバーの下が……なんか透けてるってゆー
か、シュールってゆーか……』
「というふうに、問答無用でメニューバーが削除されちゃうから」
『メニューバーなんてまず消さないんだから、エラーになって何も起きない
とかなればいいのに』
「そういうところは不親切だから、くれぐれもこういうことしないように気
をつけてね」

/*
    Preview Next Story!
*/
『意外とあぶなっかしーのねー』
「こういう API のルールには、慣れて自分で気を付けるしかないかな」
『そういうのって結構ある？』
「あるよ、たとえばメニューバーとポップアップメニューの違いとか」
『それって大きな違いあるんだー』
「というわけで次回」
＜ Version 9.04 メニューの構造 ＞
『につづく！』
「正直、この辺は MSDN の英文をしっかり読めないときついかもね……」
『水希ちゃん、きつかった頃の表情が出ちゃってるよ』


////////////////////////////////////////////////////////////////////
/*                ２００２年７月８日（月）の更新                  */
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
*/
////////////////////////////////////////////////////////////////////

