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

    KAB-studio.h


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

    送信日： 2003/02/10(Mon) No.193
    配信数： 3340 ( 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/nikki2/

2003/02/02 (Sun)
　午前中にぷらとわ１話。２時半からお仕事。帰りにマリみてとか購入。早
く帰ってきて平日的感覚にダウナー。 Web システム構想。自宅サーバー導
入したいなぁ。

2003/02/03 (Mon)
　夜中の３時半まで夏コミ申込用紙を記入。創作少年で。有休取ってお出か
け。内容はヒミツ。ただ、フジコ・ヘミングのコンサートには行って、かな
り感動したり。

2003/02/04 (Tue)
　久々のお仕事。お昼に郵便振込。「鏑矢正伝」というペンネーム。帰りに
ＨｘＨとか買ったり。

2003/02/05 (Wed)
　体調終わってるのに、人減るのに、なんかはかどるのはなぜ（爆）。今週
ちゃんとできてるのは、先週が悪かったから？　そしてコミケ。オフ会っぽ
い感じに？　プログラミング系のも売るするので期待してね。もしかしたら
KabKi も出せるかも。

2003/02/06 (Thu)
　日々 Java 。 CGI とは結構違うんだなぁ。 Java って重いけど便利。朝
起きるのが会社出る１５分前。テレビをマルチディスプレイとして使う方法
がほぼ確立。大きなテレビ買うかなぁ。

2003/02/07 (Fri)
　８日までほぼ徹夜。だべったり夏コミ申込用紙を書かせたり。昨日ははい
つも通り残業。４連休どころか１連休も……。今日はぷらとわ書いて会社
行って。

2003/02/08 (Sat)
　会社には行かず。いつの間にか寝てた……。夏コミ申込書類送付でごめん
なさい。テレビはななかがかなりいい感じ〜。そしてほとはー。とても嬉し
いんだけど今月はきついかも……。


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

■　第六章　帰郷　−７−

　森の巨木が一斉に息を吹き返し、うっすらとした明るさだけを保つ早朝に
真白い霧が立ちこめる。その中を、霧をかき分けるようにして舞を先頭に四
人は歩いていく。
　朝練を経験している俊雄はともかく、文化系一筋の恭子にとってこの早朝
の強行軍は眠い目をこすりながらのものになるはずだったが、足下もおぼつ
かない岩道や蛇や熊が出るという木々の中を歩く緊張感は眠気を完全に払拭
していた。
「ちょっと濃くなっちゃってきたかな……」
　舞が先頭という意味は、最も地の利があるというだけではない。札を前に
持ってきて念じれば、霧はすっと晴れた。しかし、圧倒的な量の水蒸気に舞
の術も気休め程度にしかならなかった。
「まだかなりあるんでしょ？」
「恭子それ五度目」
「六度目だと思う」
「舞が聞き取れなかったのを入れれば十度目だと穂香が言ってるぜ」
「それじゃ僕がぶつぶつつぶやいてるみたいじゃないですかぁ」
　そんな軽口を言っている間もちゃんと足が動き続けているという、人間の
持つ高い機能に俊雄は感謝していた。
「あと一時間くらいで休める場所に来るから、そこで朝ご飯。今の調子な
ら、お昼前に着けるかな」
「今の調子が維持できるわけないじゃない……」
「その通り。舞は自分で行くときの時間で考えているだろうが、穂香の計算
では三十分オーバーってところだな」
「そんなの言わないでよ……」
「おまえは結構楽そうに歩いてるな。やっぱサッカーやってるだけあるって
か、九十分走りっぱなしなんだものな」
「ハーフタイムはありますよ。それに高校は九十分じゃありませんから」
「そうなのか？」
　そんな会話を続けながらも一行は歩き続ける。もし霧が晴れていたら、そ
れこそ三大秘境などと言えるような景色を見られたのだが、それは舞ですら
滅多に見たことがなかったため、この会話に出ることも、それでふたりの疲
れが取れることもなかった。
「ところで聞きたかったんですけど、舞さんって、なんでここが嫌いだった
んですか？」
「そういえば、私も知らないや」
「恭子は、ここに住みたいって思う？」
「……まぁ、交通は本当に不便だけどね」
「不便どころじゃないわよ。電気もナシ、電話もナシ、新聞もナシ、テレビ
もナシ、もうなーんもナシ。おまけに交通の便が限りなく悪い、こんな場所
誰も住みたいって思わないわよ」
「で、舞さんは出てきたってわけですかぁ？」
「何よその言い方は」
　その声音には十分避難の色が見て取れて、舞は反論した。
「ふたりとも十分味わえばいいのよ。大自然に囲まれてさぞ快適でしょう
よ」
「いや、舞……電気は通ってるはずだぞ？」
「え……ええ！？」
　舞は本当に心底驚いていた。
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『ホームページは滞ってるけど、日記は夏コミの話題で盛り上がってるね』
「意外にも今年が初めての出店だから」
『売るのはほとはーとＣＤ−Ｒ……私は？　私のは？？』
「問題はそこだと思うよ」
『？』
「一応、そのＲってプログラミングのだよね」
『うん、なんか C++ のライブラリとか Java のなんかとか』
「そういうのに」
『あたしのＣＧが入っちゃ邪魔ってわけ！？？』
「う”……」
『私は、私の晴れ舞台はどこにあるの〜！？？』
http://www.kab-studio.com/
_______________________________________________________________[KCM]


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

　Version 10.15
ステータスバーを作ってみよう！

『 SDK で MFC と同じことをしてみよう企画、次は？』
「次はステータスバーです」
『これは初めっからあった機能だよね』
「そう、 Version 9.13 ( No.174 ) でやったね。ただ、ステータスバーと
ツールバーは MFC とかなり違うから、 MFC の時のはあまり参考にならない
かも」
『参考になるほどちゃんと教わってないし』
「確かに……じゃ、まずはステータスバーを表示させます」
『まずはそっからね』
「まずはコードの修正から。 MFC の時って、ツールバーはいつ作ってた？」
『あのときは CMainFrame::OnCreate() の中だったね』
「というわけで、今回も同じようにします」
『同じように、ねぇ……』
「 CMainFrame::OnCreate() っていつ呼ばれる？」
『えっと、確かウィンドウが作られるとき……あ！　そっか、メッセージが
送られてきてそれで呼ばれるから』
「そう、ウィンドウが作られるときには WM_CREATE ってメッセージが送ら
れてきて、 MFC の時は CMainFrame::OnCreate() を呼び出してました」
『ってことは、 SDK の時はウィンドウプロシージャで受け取って、また似
たような関数を作って呼ぶようにすればいい、ってことね』
「そういうこと。実際にやってみると、まずウィンドウプロシージャはこう
いう感じになります」

// ウィンドウプロシージャ。
LRESULT CALLBACK WndProc
    ( HWND p_hWnd
    , UINT p_uiMessage
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    if( p_uiMessage == WM_CREATE )
    {
        return OnCreate( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_DESTROY )
    {
        return OnDestroy();
    }
    if( p_uiMessage == WM_RBUTTONUP )
    {
        return OnRButtonUp( p_hWnd, p_wParam, p_lParam );
    }
    else if( p_uiMessage == WM_COMMAND )
    {
        if( LOWORD( p_wParam ) == ID_MENU_TEST )
        {
            return OnMenuTest( p_hWnd, p_wParam, p_lParam );
        }
    }

    // 標準的な処理をします。
    return DefWindowProc( p_hWnd, p_uiMessage, p_wParam, p_lParam );
}

「 WM_CREATE を受け取ったら OnCreate() を呼ぶって処理を追加しまし
た」
『ってことは OnCreate() を作るんだ』
「そういうこと。 OnRButtonUp() をコピペして、こんな感じに」

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    return 0;
}

『戻り値とか引数とか同じね。あ、これが Version 10.13 ( No.191 ) で
言ってた〈コピペが楽〉ってゆーのね』
「そういうこと。まぁ微妙な部分もあるんだけど」
『あの時もそんなこと言ってたね』
「 WM_CREATE のリファレンスを見てみて」

lpcs = (LPCREATESTRUCT) lParam; // structure with creation data 
 
「これは、 LPARAM には CREATESTRUCT っていう構造体のポインタが入って
るって意味」
『この構造体ってなんに使うの？』
「ウィンドウがどこに作られるとか、ウィンドウ名とか、そういう情報が全
部入ってます」
『それ便利！』
「それを使う場合にはこうなります」

// ウィンドウが作られます。
LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    LPCREATESTRUCT pstCreateStruct
        = (LPCREATESTRUCT)p_lParam;
    // とりあえずウィンドウ名を出力。
    OutputDebugString( pstCreateStruct->lpszName );
    return 0;
}

『キャストしてるんだね』
「そのキャストをウィンドウプロシージャでするっていう方法もあるわけ」
『どんなふうに？』
「たとえば、ウィンドウプロシージャで OnCreate() を呼ぶところは」

        LPCREATESTRUCT pstCreateStruct
            = (LPCREATESTRUCT)p_lParam;
        return OnCreate( p_hWnd, pstCreateStruct );

「ってして、 OnCreate() の方は」

LRESULT OnCreate
    ( HWND p_hWnd
    , LPCREATESTRUCT p_pstCreateStruct
    )
{
    OutputDebugString( p_pstCreateStruct->lpszName );
    return 0;
}

「って感じ」
『ウィンドウプロシージャの方でキャストしちゃってから渡すわけねー』
「でも、今回はそうしない方で説明するね」
『え、なんで？』
「 CREATESTRUCT はすぐには使わないから。使わないものがあると混乱の元
だし」
『そういうもん？』
「そういうもの。さて、話と、あとウィンドウプロシージャも元に戻しても
らって、ステータスバーは次のような感じに作ります」

LRESULT OnCreate
    ( HWND p_hWnd
    , WPARAM p_wParam
    , LPARAM p_lParam
    )
{
    CreateStatusWindow
        ( WS_CHILD | WS_VISIBLE
        , "テスト"
        , p_hWnd
        , 100
        );
    return 0;
}

「 CreateStatusWindow() っていう関数で作るのね」
『そう。で、この関数の説明は次回にするとして、ビルドしてみて』
『ほい。あ、エラー出た』

Main.cpp(16) : error C2065: 'CreateStatusWindow'
     : 定義されていない識別子です。

「これは、必要なファイルをインクルードしてないから。コモンコントロー
ルって憶えてる？」
『しっかりは教わってないような……』
「一応 Version 3.10 ( No.035 ) で触れたし、それにしっかり教えるよう
なことじゃないっていうか」
『どういうこと？』
「普段使ってるエディットボックスやツールバー、そういうの全部コモンコ
ントロールだから」
『ってことは、コモンコントロールかどうかとかあんまり気にしなくてい
いってことね』
「そういうこと。でも、 SDK の場合にはちょっと気にする必要があって」
『それが、このインクルードしなきゃいけないのってことね』
「 Version 8.16 ( No.158 ) でも触れてるけど、 Commctrl.h ってファイ
ルをインクルードする必要があります。だから」

#include <stdio.h>
#include <Windows.h>
#include <Commctrl.h>    // この行を追加。

「って感じになります」
『ファイルの最初の所ね。んじゃビルドして実行〜ってあれ？？　また
エラーが出た』

Main.obj : error LNK2001: 
    外部シンボル　"__imp__CreateStatusWindowA@16" は未解決です

『こ、今度のはなに？？？』
「これはちょっと難しい部分だから詳しくは次の次の章に書くけど、これは 
CreateStatusWindow() の関数本体が見つかりません、みたいなエラー」
『ど、どういうこと？』
「インクルードファイルって、実は関数の呼び出し方が書かれてるだけ。だ
からその関数本体があるって保証はどこにもないんです」
『で、インクルードだけしたから、その本体がないって言われてるってこ
と？』
「そういう感じ。で、これを解決するために、【プロジェクトの設定】ダイ
アログで【リンク】−【一般】ページの【オブジェクト/ライブラリ 
モジュール】って部分を見て」
『あ、同じ拡張子が .lib のファイルがいっぱいある。』
「ここにあるもののなかに、ウィンドウズでアプリを動かすための機能が
びっしり入ってるんです」
『こーゆーのを見てるから、ちゃんとできてるってこと？』
「そういうこと。 MFC だとこういうのは隠れたところでしちゃうんだけど
ね」
『え？　そういうのできるの？』
「うん。 MFC のプロジェクトで同じ欄を見てみると分かるけど、空欄に
なってるから」
『それってなんか怪しい感じ……』
「まぁその辺はもう少し先ってことで、この一覧の最後にスペースを入れて
から」

comctl32.lib 

「を追加して」
『ほい追加。んで OK 押して閉じてビルドして実行！　お、今度はちゃんと
できた！　ステータスバーもある！』
「というわけで表示はここまで。次はステータスバーを操作します」

/*
    Preview Next Story!
*/
『インクルードとかライブラリとか、そっちの方が難しいね』
「うん、この辺は２章後くらいにちゃんと教えるから」
『それって遅くない』
「確かに、最初の方で必要な知識ではあるんだけど、でも」
『でも？』
「こういう部分を本当に理解してることが重要かなと」
『とりあえず解決できるっていうのも重要じゃない？』
「というわけで次回」
＜ Version 10.16 ステータスバーを使ってみる・ SDK 編 ＞
『につづく！』
「このステータスバーのとかはそういう方針だけどね」
『なんか偏ってる〜』


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

