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

    KAB-studio.h


    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz

    送信日： 2007/03/12(Mon) No.398
    配信数： 1565
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

/*            KAB-studio.h 発行終了のおしらせ                     */

このたび、本メールマガジン「KAB-studio.h」は、2007年3月26日発行の
No.400号をもちまして発行を終了することとなりましたため、みなさまに
おしらせいたします。
発行終了後の各コンテンツは以下の通りとなります。

・ニュースおよび日記ダイジェスト
→KAB-studioではRSSを配信してしておりますのでそちらをご利用ください。
http://www.kab-studio.biz/rss.xml

・風雅、舞い
ホームページにて不定期掲載を行います。
掲載はかぶろぐおよびRSSにておしらせいたします。
http://www.kab-studio.biz/Novel/Fuga/index.html

・#pragma twice
No.400にて最終回となります。ご了承ください。
ホームページ版にて全話公開しておりますのでご利用ください。
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

以上、ご了承頂ければと思います。


////////////////////////////////////////////////////////////////////
// NEW!!
http://www.kab-studio.biz/index.html

2007/03/12 (Mon)
　ほとはー外伝３にP.93を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html

2007/03/12 (Mon)
　#pragma twice ホームページ版にアーカイブ追加！
18.08 継承で機能を分けて再利用
18.09 イベントごとにメンバ関数を分ける
[ #pragma twice ]
http://www.kab-studio.biz/Programing/PragmaTwice/index.html


////////////////////////////////////////////////////////////////////
// ちょお普通な日記
http://www.kab-studio.biz/nikki2/index.html

2007/03/04 (Sun)
　アニメ観て感想書きつつほとはー外伝３更新とか。来週月曜分のを描いた
り。明日のおしごとの準備。これが終わればおしごとひとつと確定申告くら
い。

2007/03/05 (Mon)
　おしごと１日目。でも午前中で帰ってくる。ほとはー外伝３来週分ができ
てしまった。

2007/03/06 (Tue)
　おしごと２日目。去年よりいい部分も多い。新入社員多いからがんばろう
ねということ？　帰りにJava本購入。今回もサブ講師。寝過ごしたと勘違い。

2007/03/07 (Wed)
　おしごと３日目。…………。おしごとの悪いパターン。WBSの特集がちょっ
と痛い。

2007/03/08 (Thu)
　昨日の夜中におしごとのまとめ書いて、とかしてたら６時半。部屋の片づけ
とかを。あんまりダイエットがんばらなくてもいい？

2007/03/09 (Fri)
　おしごと関係の電話で起きる。かなりぐだー。ぷらとわ検索機能の強化。
あとはsakusaku DVD観たり。

2007/03/10 (Sat)
　ほとはー外伝３とかの広告にWiiとプレステ３追加。そのあと確定申告をまっ
たりと。収入範囲を広げて必要経費を増やす。これでペンディング減った。


////////////////////////////////////////////////////////////////////
// かぶろぐ。
http://d.hatena.ne.jp/kab_studio/

2007/03/04 (Sun)
http://d.hatena.ne.jp/kab_studio/20070304
起きた。
[KAB-studio]ぷらとわの追加はありません。
[KAB-studio][ほとはー]ほとはー外伝３ P.92
[アニメ]獣拳戦隊ゲキレンジャー 第3話「シオシオ！そうじ力」
[アニメ]「牙」 第48話「降臨」
[アニメ]おねがいマイメロディ〜くるくるシャッフル！〜 
　第49話「ありがとうって言えたらイイナ！」
[アニメ]ひまわりっ！！ 第9話「昨日の友は今日の敵」
[アニメ]京四郎と永遠の空 第9話「乙女見果てぬ」
[アニメ]神様家族 第9話「初恋 再び…」

2007/03/05 (Mon)
http://d.hatena.ne.jp/kab_studio/20070305
起きた……。
帰ってきた。
[アニメ]金色のコルダ 第22話「君のためのファンファーレ」
[アニメ]がくえんゆーとぴあ まなびストレート！ 
　第9話「わたしたちのうた」

2007/03/06 (Tue)
http://d.hatena.ne.jp/kab_studio/20070306
起きた。
帰ってきた。
[病気治療]黒爪、右足も剥がれる
[買]Java本購入。
[アニメ]SHUFFLE! MEMORIES 第9話「ネリネ編 後編」
[アニメ]Pumpkin Scissors 第22話「孤独な天秤」

2007/03/07 (Wed)
http://d.hatena.ne.jp/kab_studio/20070307
起きた。
帰ってきたっす。
[アニメ]DEATH NOTE 第21話「活躍」
[アニメ]ネギま！？ 第23話「ちょっとそれはないよ（略）」

2007/03/08 (Thu)
http://d.hatena.ne.jp/kab_studio/20070308
起きた。
[アニメ]ロケットガール 第3話「ランチパッド -launch pad-」
[アニメ]武装錬金 第23話「BOY MEETS BATTLE GIRL」

2007/03/09 (Fri)
http://d.hatena.ne.jp/kab_studio/20070309
起きたー。
[KAB-studio]ぷらとわ検索機能修正。
[きらら]まんがタイムきらら 2007年4月号
[買]sakusaku Ver.3.0
[アニメ]のだめカンタービレ 第9話
[アニメ]ひだまりスケッチ 第9話「9月4日 裏新宿の狼」
[アニメ]セイントオクトーバー 
　第10話「ロリ初恋！あなたに届け超マイハート！」
[アニメ]すもももももも〜地上最強のヨメ〜 第21話「それぞれの思い」

2007/03/10 (Sat)
http://d.hatena.ne.jp/kab_studio/20070310
起きた。
[KAB-studio]広告追加。
[アニメ]デルトラクエスト 第10話「牢獄からの脱出」
[アニメ]MASTERキートン 第1話「迷宮の男」(新)
[アニメ]おとぎ銃士 赤ずきん 第36話「鍵のちから」
[アニメ]ふしぎ星の☆ふたご姫 Gyu! 
　第49話「ふたごVSビビン☆最後の対決！」
[アニメ]コードギアス 反逆のルルーシュ 第20話「キュウシュウ戦役」


////////////////////////////////////////////////////////////////////
// Ajaxでエロゲーを作るブログ
http://d.hatena.ne.jp/AjaxEroge/

（今週はお休みです）


////////////////////////////////////////////////////////////////////
// 風雅、舞い
http://www.kab-studio.biz/Novel/Fuga/index.html

■　第十五章　濁る澱み、清らかな血溜り　−２６−

「……なんなの、これ……」
　洞窟の中で、舞は見上げる。
　家の下に、洞窟があった。立体的な蜘蛛の巣状の穴が縦横に張り巡らされ
ている。外と継ながっているのか強い風が流れている。それが長年掛けて道
を造ったのかもしれない。
　上を見上げてはみるが、ようやく慣れた目でも、光がほとんど届かないた
め、かろうじて頭上に穴が空いていることが分かるだけだった。
　むしろ、水の力を使って空間を把握する方が比較的楽だった。風が強いに
も関わらず、周囲には異常なほどの水蒸気が満ちていた。湿度が高かったた
めに、舞は空気を操り、直接床に叩き付けられることを防ぐことができた。
　だが、無理な方向転換で穴をくぐって来たため、途中で智子を離してし
まっていた。
「頭とか打ってないといいんだけど……」
　手を伸ばしても、智子の場所までは把握できない。
　それ以前に、思うように水を操ることができなかった。
　普段のように水を感じる事ができない。風の違和感がそうさせるのか、こ
こに満ちている水が特殊なのか、それとも自分が異常なのか。
「とにかく先生を見つけないと……それとも、彼を探した方がいいのかな」
　少年は、先にここへと来ているような気がした。それなら家にいなかった
説明もつくし、何よりこの場所は異常で、そこに少年が関係しているように
感じられた。
「って、探すなんて無理よね……」
　洞窟の構造が分からない以上、闇雲に歩くよりは無理をしても通ってきた
経路を戻る方が確実だった。
　舞は手を広げ、水蒸気と共に風を巻き上げて身体を持ち上げられないか試
してみる。
『おい、いたぞ！』
　その声は、鳴動する風がそう聞かせた幻聴かと舞は感じた。だが直後、舞
の背後に光が点り、鋭い何かが舞の大腿を貫いた。
                                                              (続く)

////////////////////////////////////////////////////////////////////
// JavaA2Z
http://www.kab-studio.biz/Programing/JavaA2Z/index.html

■追加・更新単語

（今週の追加はありません）


////////////////////////////////////////////////////////////////////
// #pragma twice
http://www.kab-studio.biz/Programing/PragmaTwice/index.html

　Version 18.11
コントロールとデータのやりとりをするクラスを作る

「前回は標準 C++ ライブラリの iostream 系クラスや std::string クラス
を使用して、 C ランタイムライブラリの代わりの処理をしてみました」
『……でもあまり便利になってないよーな……』
「というわけで、今回はその便利な機能を持つクラスを作ってみましょう」
『ええっ、そんなことできるの？』
「もちろん。まぁ MFC くらい便利にはできないけど、十分便利なクラスが
簡単に作れるから」
『おおー』
「これから作るのは、エディットボックスと値のやりとりをするための
CEditCtrl クラス」
『おお、なんだか MFC っぽくて本格的！』
「まずはこのクラスを作ります。 Version 18.03 ( No.390 ) と同じ方法で
ソースファイルとヘッダーファイルを追加してください。作成するファイル
は以下の2つです」

・EditCtrl.h
・EditCtrl.cpp

「で、これから作る CEditCtrl クラスは、以下のような機能を持っていま
す」

・エディットボックスと一対一で結びつく
・GetInt() メンバ関数で整数値として値を取得する
・SetInt() メンバ関数で整数値をセットする
・IsError() メンバ関数でエラー状態を取得する

「この機能を CEditCtrl クラスに持たせるので、 EditCtrl.h は以下のよ
うになります」

// EditCtrl.h

// CEditCtrl クラス。
class CEditCtrl
{
    // このエディットボックスのウィンドウハンドル。
    HWND m_hWnd;
    // エラー状態。 TRUE ならエラー。
    BOOL m_bIsError;

public:
    // コンストラクタ。
    CEditCtrl( HWND p_hDlgWnd, int p_iId );
    // int 型の値として値を取得します。
    int GetInt();
    // int 型の値をセットします。
    void SetInt( int p_iData );
    // エラー状態を取得します。
    BOOL IsError();
};

『一対一で結びつくから、エディットボックスのウィンドウハンドルを
メンバ変数として持つんだ』
「そういうこと。他にもエラー状態を取っておく m_bIsError メンバ変数も
持っています」
『あとはコンストラクタと、値を取得するのとセットするメンバ関数、エラー
取得するメンバ関数ね』
「 GetInt() 、 SetInt() メンバ関数は Version 16.05 ( No.332 ) の
【getter】【setter】とほとんど同じ」
『なるほど、エディットボックスをメンバ変数と考えるわけね』
「こういうのに合わせた方がメンバ関数の機能が分かりやすいし、引数や
戻り値もすぐ決まるから簡単かな。さて、実際の本体、 EditCtrl.cpp はこ
んな感じ」

// EditCtrl.cpp
#include <Windows.h>
#include <string>
#include <sstream>
#include <strstream>
#include "EditCtrl.h"

// コンストラクタ。
CEditCtrl::CEditCtrl( HWND p_hDlgWnd, int p_iId )
    : m_bIsError( FALSE )
{
    // ウィンドウハンドルを取得します。
    m_hWnd = GetDlgItem( p_hDlgWnd, p_iId );
}

// int 型の値として値を取得します。
int CEditCtrl::GetInt()
{
    // エラーをリセットします。
    m_bIsError = FALSE;

    // エディットボックス用文字列を用意します。
    char pch[256];
    // 文字列を取得します。
    GetWindowText( m_hWnd, pch, 255 );
    // 文字列から数値として取り出すためのストリームを用意します。
    std::istrstream cIStrStream( pch );
    // int 型に変換します。
    int iData;
    cIStrStream >> iData;

    // 入力チェックを行います。
    if( cIStrStream.fail() )
    {
        m_bIsError = TRUE;
        return 0;
    }

    // 値を返します。
    return iData;
}

// int 型の値をセットします。
void CEditCtrl::SetInt( int p_iData )
{
    // 文字列変換するためのストリームを用意します。
    std::ostringstream cOStringStream;
    // 引数を文字列変換します。
    cOStringStream << p_iData;
    // 中にある std::string クラスの、参照を取り出します。
    std::string &rcStringAnswer = cOStringStream.str();
    // それをエディットボックスにセットします。
    SetWindowText( m_hWnd, rcStringAnswer.data() );
}

// エラー状態を取得します。
BOOL CEditCtrl::IsError()
{
    return m_bIsError;
}

『んー、もしかしてほとんど OnEqual() メンバ関数と同じ？』
「そう、 CNewCalcDialog クラスの OnEqual() メンバ関数とかなりの部分
が似ています。違うのは」

・ひとつのエディットボックスだけを対象にしている
・エディットボックスのウィンドウハンドルは m_hWnd メンバ変数を使用
・エラー状態をメンバ変数として保存する

「ってところかな」
『えーっと、まず最初のは、 OnEqual() メンバ関数の時は IDC_E_LEFT 、
IDC_E_RIGHT 、 IDC_E_ANSWER の3つを同時に操作してたけど、このクラス
は一対一の関係だからひとつだけ、ってことだよね』
「そういうこと。だからシンプルになってます」
『次は……そっか、コンストラクタでエディットボックスの
ウィンドウハンドルを取得して、それを使ってるんだ』
「そう、 GetDlgItem() メンバ関数をコンストラクタで呼び出して、
ウィンドウハンドルを m_hWnd メンバ変数に取ってあるんです。それを
使い回すわけ」
『これもさっきの一対一の関係ねー。最後のは……これ？』

// int 型の値として値を取得します。
int CEditCtrl::GetInt()
{
    // エラーをリセットします。
    m_bIsError = FALSE;

// 略

    // 入力チェックを行います。
    if( cIStrStream.fail() )
    {
        m_bIsError = TRUE;
        return 0;
    }

「そう、この部分。まぁ簡単に言うと、 cIStrStream.fail() の結果を代わ
りに取っておく、ってところかな」
『そうしないとエラー情報が返せないんだね』
「 Version 13.05 ( No.241 ) で説明したように、エラーの返し方には色々
方法があるんだけど、今回はエラー状態を取っておくってことで、 
GetLastError() 関数の方法に近いかな」
『まぁ fail() メンバ関数と同じ方法だしね』
「さて、最後に使う側。 NewCalcDialog.cpp は以下のように修正します」

// NewCalcDialog.cpp
#include <Windows.h>
#include <stdio.h>
#include "EditCtrl.h"    // この行を追加。
#include "resource.h"
#include "Dialog.h"
#include "NewCalcDialog.h"

// 略

// = ボタンが押された時のイベントハンドラ。
void CNewCalcDialog::OnEqual()
{
    // 各エディットボックス用の、 CEditCtrl クラスの変数を
    // 用意します。
    CEditCtrl cEditCtrlLeft( m_hWnd, IDC_E_LEFT );
    CEditCtrl cEditCtrlRight( m_hWnd, IDC_E_RIGHT );
    CEditCtrl cEditCtrlAnswer( m_hWnd, IDC_E_ANSWER );

    // 入力値を取り出します。
    int iLeft = cEditCtrlLeft.GetInt();
    int iRight = cEditCtrlRight.GetInt();

        // 入力チェックを行います。
    if    ( 
            ( cEditCtrlLeft.IsError() ) ||
            ( cEditCtrlRight.IsError() )
        )
    {
        MessageBox
            ( m_hWnd
            , "入力に誤りがあります。"
            , "エラー"
            , MB_OK
            );
        return;
    }

    // 足した値を IDC_E_ANSWER にセットします。
    cEditCtrlAnswer.SetInt( iLeft + iRight );
}

『お、かなりシンプルになった！』
「エディットボックスとのやりとりを CEditCtrl クラスにまとめたことで
かなりシンプルな感じになりました」
『……でも、これって結局プログラムを移しただけだよね』
「本当にそうかな？」
『え？』

/*
    Preview Next Story!
*/
『こうやって別クラス作るのってめんどい！　でも』
「でも？」
『使うと便利で面白いかも』
「そう、それを少しずつ続けると……」
『つづけると？』
「というわけで次回」
＜ Version 18.12 プログラムはクラスの組み合わせ ＞
『につづく！』
「それを続けていくことで、大きなプログラムが自然とできるわけです」
『ホントかなー、結局私、そういうの作ってなくない？』
「ギク」


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/index.html
・購読登録を解除したいときにはこのページで行なってください。
http://www.mag2.com/m/0000012198.htm
・解除は自分で行なってください。
・バックナンバーはこれらのページにあります。
http://backno.mag2.com/reader/Back?id=0000012198
http://www.kab-studio.biz/Freeware/index.html#MailMagazine


////////////////////////////////////////////////////////////////////
/*
    KAB-studio.h
      Weekly Mail Magazine.
      Written by Kaburaya Seiden.
      http://www.kab-studio.biz/Info/MailMagazine/

    (C)KAB-studio 1999 - 2007 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

