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

    KAB-studio.h


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

    送信日： 2002/07/15(Mon) No.166
    配信数： 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/07/07 (Sun)
　アニメ版 Kanon 全話一気に見ました。よかった〜。ラブラブ度がはっき
りしてたのが良かったです。個人的にかなりいい感じ。それ以外は、ほと
はー描きと、「筆者の装備」の修正。テレビはなんか憶えてない……。

2002/07/08 (Mon)
　プログラミングは「定数リテラルの文字列化」。帰りに横浜で Kanon 関
係買いあさり。ポイント貯める？　やっぱあゆ突出してます。名雪は不思議
なポジション？　ほとはーヒット数いい感じ。でもこの絵柄って受け入れら
れてる？

2002/07/09 (Tue)
　プログラミングはテスト用に echo サーバーもどき作成。帰りに横浜で 
Kanon DVD とか購入。散財は特に気にしてないです。セキュアドで８０万も
狙うし。次のＰＣは USER-SIDE のを希望。ポケモン映画あんまだっ
た……。

2002/07/10 (Wed)
　マルチスレッドで難題に。 Command パターン使うにしてもむつかしい。
帰りに横浜でマキシシングル初回限定版を探すも見つからず。ほとはー２の
６完成で２の７へ。ストーリーしっかり決まってるんで変えられない〜。

2002/07/11 (Thu)
　前に作ったプログラムにバグの可能性があって修正。 C ベタって危険や
なー。帰りに横浜で Kanon DVD ２巻初回限定版他購入。お金を気にしない
のは、しばらく転職しないだろうから、貯金切り崩せるんで。やっぱラブラ
ブ話が基本っすよねー。

2002/07/12 (Fri)
　VirtualAllocEx() って面白い。ちゃんとプロセスごとにアクセス権が決
まってるんですね。一度横浜行ってから飲み会へ。日記読まれてる〜。 GOF 
プレイ。秋子さん、技のモーション大きすぎ……。

2002/07/13 (Sat)
　新宿、神保町、秋葉原へ！　こみっくかのうぉ、アンソロジー３冊、 DVD 
１巻初回限定版、マキシシングル初回限定版、そしてＰＣ版初回限定版購
入！　これでかなり揃ったことに。まだいっぱいあるけど。他にも氷川へき
る同人誌とか色々購入。


////////////////////////////////////////////////////////////////////
/*                         風雅、舞い                             */
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.05
右クリックメニューを表示する！

「今回は右クリックメニューを表示してみます」
『おおっ！　なんか実用的って感じ』
「確かに右クリックメニューは便利だからできとくといいかな。じゃ、実際
にしてみましょう。まずは、〈右クリック〉ってイベントを受け取ってみま
す」
『やっぱ、メッセージとかイベントハンドラとかそういうとこ？』
「そういうとこ。まず ClassWizard を開いて」
『ほい。メッセージ関係だから【メッセージマップ】でいいんだよね』
「そう、そのページ。まず【クラス名】が CSdiTestView になってることを
確認して」
『うん、なってる』
「これがまず重要。えーっとまず、右クリックとかのメッセージを受け取る
のはウィンドウでしょ。だから、ウィンドウのクラスじゃないとまずダメ」
『ってことは、今回のプロジェクトだと CMainFrame も入るわけね』
「そう、だからどっちでもイベントハンドラを作れるんだけど、今回の右ク
リックは CSdiTestView の方だけ。なんででしょう」
『んー……ビューウィンドウがフレームウィンドウの上に乗ってるってゆー
あれのこと？』
「そうそうそう。 Version 9.01 ( No.162 )でやったように、フレームウィ
ンドウのビューウィンドウが乗ってます。右クリックすると、ビューウィン
ドウにだけメッセージが送られます」
『フレームウィンドウはビューウィンドウに隠れてるから送られないわけ
ね』
「だからこういう類のメッセージは必ず CSdiTestView にイベントハンドラ
を作る必要があります」
『右クリックのね』
「そう。正確には……えっと、オブジェクト ID を CSdiTestView に、メッ
セージを WM_RBUTTONUP にして【関数の追加】ボタンを押して」
『 WM_RBUTTONUP ってメッセージ……あれ？　これってヂヅラどーりに読む
と、右のボタンが上がった時だよね。押した時じゃないの？』
「押したときのは WM_RBUTTONDOWN だけど、そっちじゃなくて UP の方。
っていうのも、ボタンなんかも全部マウスのボタンを離したときに反応する
ようになってるから」
『あ！　ホントだ、ボタンもメニューも、上げたときだ！　気付かなかっ
た……』
「理由は、たぶんだけど、押してから〈あ、間違えた〉って時には全然違う
ところで離せば押したことにしないですむから」
『よーするにキャンセルできるってことね』
「そういうこと。だから WM_RBUTTONUP のイベントハンドラを作ります」
『と、【関数の追加】ボタン押したからもうできてるんだ。【コードの編集
】押してと』

void CSdiTestView::OnRButtonUp(UINT nFlags, CPoint point) 
{
    
    CView::OnRButtonUp(nFlags, point);
}

『ってメンバ関数ができたよ。ちゃんと CSdiTestView のメンバ関数だね』
「一応 TRACE() でも書いて、右クリックでちゃんとこれが呼ばれるって確
認しておいて」
『ほいほい。ちゃーんと右ボタンを離した時に呼ばれるねー。メッセージっ
思いのほか細かいもんなんだね……』
「さて、ここに右クリックメニューを表示させるコードを追加します」
『おー』
「まずはコードを見てもらいましょう」

void CSdiTestView::OnRButtonUp(UINT nFlags, CPoint point) 
{
    // 画面上のマウスカーソルの位置を取得します。
    CPoint cPoint;
    GetCursorPos( &cPoint );
    // フレームウィンドウのポインタを取得します。
    CWnd *pcMainFrameWnd
        = AfxGetMainWnd();
    // メニューバーを取得します。
    CMenu *pcMenuBar
         = pcMainFrameWnd->GetMenu();
    // 「ファイル」サブメニューを取得します。
    CMenu *pcFileMenu
        = pcMenuBar->GetSubMenu( 0 );
    // ポップアップメニューを表示します。
    pcFileMenu->TrackPopupMenu
        ( TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON
        , cPoint.x
        , cPoint.y
        , pcMainFrameWnd
        );

    CView::OnRButtonUp(nFlags, point);
}

『……短いけど、なんか初めて見るのばっかってゆーか、なんかややこしそ
うってゆーか』
「ややこしいのはかなりだから覚悟して」
『げげ』
「じゃ、ひとつずつ見ていきます」

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

「 GetCursorPos() は、マウスカーソルのある位置を取得する API です」
『メンバ関数じゃないのね。あれ？　このメンバ関数に CPoint point って
あるけど、これは使えないの？』
「うん、これじゃダメ。これはビューウィンドウの中でのマウスの位置が
入ってるんだけど、必要なのは画面上の位置だから」
『クライアント領域の位置みたいなもんね』
「そゆこと。ポップアップメニューを表示するには TrackPopupMenu() って
いうのを使うんだけど、そのとき渡すのは画面上の位置じゃないといけない
から」
『じゃ、次』

    // フレームウィンドウのポインタを取得します。
    CWnd *pcMainFrameWnd
        = AfxGetMainWnd();

『これが謎』
「フレームウィンドウは分かるよね」
『ビューウィンドウが乗っかってるのがフレームウィンドウだよね』
「そのフレームウィンドウへのポインタ、つまり CMainFrame のポインタを
取得するのが AfxGetMainWnd() っていう MFC の関数」
『その辺がよく分かんないのよねー』
「前回の CMainFrame::OnCreate() の中での this ポインタとアドレスは同
じになる……んだけど」
『確かに TRACE() とかで見るとそうだね』
「ま、その辺はもっと MFC の構造が分からないとどうしようもないから、
あとで」
『このフレームウィンドウへのポインタは何に使うの？』
「それは、まず次の行で」

    // メニューバーを取得します。
    CMenu *pcMenuBar
         = pcMainFrameWnd->GetMenu();

『さっそくフレームウィンドウのポインタを使って…… GetMenu() はいつ
ものメニューバーを取るのだね。あ、そっか！　メニューバーはフレーム
ウィンドウに着いてるから』
「そういうこと。いつものように普通に GetMenu() を呼ぶと、ビューウィ
ンドウのメニューバーを取得しようとするんだけど」
『そんなもの着いてないからダメなんだ。なるほどねー』
「後ろにあるフレームウィンドウと、ただの白い四角のビューウィンドウ、
その違いをしっかり理解してないとこういうのは難しいかもね」
『ってゆーか、こういうコードを見ると分かるってゆーか』
「それはあるかもね。次は」

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

『これは前回使ったサブメニューを取得するのだね』
「実は、右クリックメニューはポップアップメニュー専用。メニューバーは
表示できないんです」
『ここでもメニューバーとポップアップメニューが違うのね』
「だからここでサブメニュー、つまりポップアップメニューを取得して、そ
れを右クリックメニューとして表示します。それが」

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

「です」
『この TrackPopupMenu() ってメンバ関数で右クリックメニューを表示する
のね』
「これは CWnd のメンバ関数だけど、 API も同名のがあるからね」
『えっと』

        ( TPM_LEFTALIGN | TPM_TOPALIGN | TPM_LEFTBUTTON

『はフラグだね』
「最初のふたつはメニューをどの辺に表示するか」
『リファレンス読むと、縦と横があるみたいね。やっぱ一般的なのは、マウ
スカーソルの右下に出すってゆーの？』
「たぶんね。まぁ使いやすさは場合によって違うかもしれないけど」
『 TPM_LEFTBUTTON は……何？』
「これは、表示した右クリックメニューを左クリックで選べる、っていうの」
『……それって当たり前じゃないの？』
「だね、だからこれは必ず入れなきゃダメかな。 TPM_RIGHTBUTTON は微妙
だけど」
『右クリックのもあるんだ』
「これはアプリによって違うみたいだね。僕は、右クリックメニューだから
右ボタンで選べるようにすると」
『便利』
「じゃなくて、間違えて押しちゃいそうかなって思うから TPM_RIGHTBUTTON 
は含めないけど」
『その辺は人それぞれって感じね。次の』

        , cPoint.x
        , cPoint.y

『はさっき取ったマウスカーソルの位置ね』
「この位置に右クリックメニューを表示します。最後に」

        , pcMainFrameWnd

『あ、またフレームウィンドウのポインタが出てきた』
「右クリックメニューをの項目、たとえば【ファイルを開く】を選ぶと、そ
の選んだってメッセージが送られるんだけど、その送り先のウィンドウをこ
の第４引数で指定します」
『ここではフレームウィンドウにしてるわけね』
「ここで this を渡すと、このメンバ関数は CSdiTestView のメンバ関数だ
からビューウィンドウにメッセージが送られます」
『それじゃいけないってこと？』
「少なくともこの右クリックメニューはね。【ファイルを開く】とかのイベ
ントハンドラはフレームウィンドウにしかないから」
『というわけでビルドして実行！　おー、右クリックメニューでファイルメ
ニューが！【ファイルを開く】でファイルダイアログが！　結構すごい！』

/*
    Preview Next Story!
*/
『フレームウィンドウとビューウィンドウの関係は解るけど』
「解るけど？」
『ポインタとか出てくると解んない』
「実際に変数を作ってる所を見ると解るんだけどね」
『それはそれで難しそうね』
「でも MFC は使うだけでも結構複雑なのあるよー」
『げげ』
「というわけで次回」
＜ Version 9.06 メニューアイテムのハンドラを作る！ ＞
『につづく！』
「次回は難しいもののひとつ、許可・不許可の選択とかもあります」
『うー難しいのやだー』


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

