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

    KAB-studio.h


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

    送信日： 2005/03/14(Mon) No.298
    配信数： 1975
    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*                ２００５年３月１４日（月）の更新                */
http://www.kab-studio.biz/index.html

・オフラインミーティング！
　オフラインミーティングしましたー。詳細はちょお普通な日記３月１３日
にて。
[ ちょお普通な日記２００５年３月１３日 ]
http://www.kab-studio.biz/nikki2/n17_03a.html#20050313

・ほとはー外伝３に１ページ追加
　三人合体ホットハーブ 外伝３に P.09 を追加！
[ 三人合体ホットハーブ 外伝３ 【ワタシ の キロク】 ]
http://www.kab-studio.biz/Comic/HotHerbA3/index.html


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

2005/03/06 (Sun)
　午前中はうだーっと。午後はぷらとわの更新とかのあと、月例バックアッ
プ。ほとはー外伝３を描いて飽きたのでヨドバシ川崎店へ歩いていく。
radiance 初回限定版と超硬DVD-Rホワイトレーベルを購入。来週は
「萌えJava本」に手を付けます。自分なりの回答を模索しつつ。うまくでき
そうなら最優先で。

2005/03/07 (Mon)
　休日はパス。午前中は単語追加。午後３時から歯医者で神経を抜く。帰っ
てからは萌えJava本のキャラ起こし。サキとまゆ。百合で行きます。
kab-studio.com 廃止でヒット数減ってる……。そして焦ってる？　本当は
そんなつもりなかったんだけど。そしてマジカルオープン。

2005/03/08 (Tue)
　寝る前の太極拳。午前中は単語追加、午後は「萌えJava本」書き……うま
くいかない。お金儲けのアイディアが浮かぶ。Amazon アソシエイトを使っ
たウェブサービス。プログラミングに負けた気分……。そして花粉症と職業
訓練。

2005/03/09 (Wed)
　何もしなかった一日。午前中はのんびり、午後は横浜へ。やる気なし。気
長にやる？　今日買ってきたもの。 Amazon アソシエイトしてます。最近
がっつい。

2005/03/10 (Thu)
　午前中は洗濯してシャワー浴びて。午後から夜９時まで Machician 書き。
自分でも好きな作品。 Machician まわりがんばってみようかな。そして
ポジショントーク。

2005/03/11 (Fri)
　お昼に体調が悪くなる。去年末と同じ症状。原因、理由は不明。今日一日
はだましだましモードで。病院また行くかなぁ。 JavaA2Z のバグ取り。 OR 
と AND がごっちゃ。４時から歯医者。帰ってから単語追加。就職活動しよ
う。長期計画で。エンターテイメント系は Machician と版権もので。

2005/03/12 (Sat)
　今日も何もせず。９時半に起きてシャワー浴びてごはん食べて JavaA2Z 
の単語を追加して午後はのんびりして横浜行ってバルドフォースエグゼの
予約して帰ったらコンプティーク読んで referer のチェックして。横浜
行ってる間に Machician のアイディア練って。そして液晶とタブレット。

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

■　第十二章　超越する存在　−３−

「なんで勝てないのかな……」
　１階のコンビニでパンを選ぶ少年、その脇でリシュネが愚痴る。
「勝つことは簡単だよ、距離を取って遠距離狙撃、もしくは全方位攻撃」
「最近、それも効かないんじゃないかって思うんだけど」
「まさか」
「少なくとも遠距離狙撃はできないと思う。穂香に発見される」
「……強化した身体を扱い慣れてないだけだよ。全力で動けるようになれ
ば……」
「もっと根本的に違うと思う」
「何が？」
　聞きたくない。
　なのに、尋いていた。
「泉の力は、私達とは異種、そして、同等」
「まさか」
　セリフを読むようにすぐさま答えた。
「僕らはＡＰだ。あいつらは人間だ。その差は大きい」
「私達は人間じゃないの？」
「先生だって言ってたじゃないか。俺達ＡＰは遺伝子からヒトとは異なって
いるんだから」
「それはあなたが拠り所としているだけで、本質的に必要な事ではない、と
言ってるの」
「リシュネ」
　少年が睨む。
「……つまらないことを言ってごめんなさい。帰りましょ」
　レジでお金を払ってから、コンビニを出る。
「あの海の底に沈んでた死体、リシュネも見ただろ？」
「ミナクートのこと？　あれと比べたら、それこそＡＰはヒト以外の何者で
もないもの。私達は遠く及ばないんだから」
「……」
「認めたくないのは分かるけど。でも、私達と同等レベルだとしても、遥か
上とは思ってない。だから」
　リシュネはこぶしを握る。
「がんばって、舞を超える」
                                                              (続く)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『おじさん、どこ行くの？』
　林田は答えない。
『おじさん？』
『…………』
『……』
　ぼこっ。

Machician 第５話 待逢として 好評連載中！
[ Machician ]
http://d.hatena.ne.jp/kab_studio/20040823#1093276416
[ Machician＋設定 最新一覧 ]
http://d.hatena.ne.jp/kab_studio/searchdiary?word=*%5BMachician
_______________________________________________________________[KCM]

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

■追加・更新単語
new
参照
インスタンス
boolean
初期化
デフォルト値
初期値
toString
正規表現
置換
compareTo
==
==演算子
equals
文字列リテラル
リテラル
文字列
String
配列
Hashtable
ハッシュコード
Vector
要素
インデックスナンバー
List

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

　Version 14.31
スレッドからダイアログに表示する

「さて、今回は残りの３つ」

・検索対象フォルダの表示
・検索結果の表示
・検索終了時にキャンセルダイアログを閉じる機能

「この３つを一気に解決します」
『え”、そんな簡単にできるの？』
「知識的にはこれまでのものを応用するだけだからね。ただ、細かいところ
は気を付けなきゃいけないけど……さて、まずはソースコードからいつも見
てる SearchDlgDlg.cpp の方はこんな感じ」

// SearchDlgDlg.cpp
// 略 ...

// CountMatchFile() と StartCountMatchFile() は削除。

void CSearchDlgDlg::OnSearchStart() 
{
    // 【検索中】ダイアログを表示します。
    CSearchingDlg cDlg;
    cDlg.DoModal();
    // 結果を出力します。
    m_cMatchNumStr.Format( "%d", GetMatchNum() );
    UpdateData( FALSE );
}

『……へ？　削除？』
「そう。検索機能本体は、 SearchDlgDlg.cpp の方に移します」
『え、なんで？』
「これから追加する機能のうち」

・検索対象フォルダの表示
・検索終了時にキャンセルダイアログを閉じる機能

「は【検索中】ダイアログ、つまり SearchDlgDlg.cpp の方だから」
『同じファイルの方がやりやすいってこと？』
「そういうこと。それしないと、この前みたいに関数作って呼び出すってし
なきゃいけないから」
『う、めんどい……』
「で、その SearchDlgDlg.cpp 」

// ダイアログのウィンドウハンドル。
HWND g_hSearchingDlgWnd = NULL;

// エディットボックスのウィンドウハンドル。
HWND g_hEditFolderWnd = NULL;

// ストッパー。
bool g_bIsStop = false;
// このストッパーをオンにする関数。
void SetStopOn()
{
    g_bIsStop = true;
}

// 一致数。
int g_iMatchNum = 0;
// 一致数を取得します。
int GetMatchNum()
{
    return g_iMatchNum;
}

/*
    指定したフォルダからファイルを検索します。
    戻り値として一致数を返します。
 */
int CountMatchFile
    ( const char * const p_pchFolderPath
    , const char * const p_pchFileName 
    )
{
    int iNum = 0;

    // ストップポイント１。
    if( g_bIsStop == true )
    {
        return 0;
    }

    // 検索するフォルダをカレントディレクトリにします。
    BOOL bRes;
    bRes = SetCurrentDirectory( p_pchFolderPath );
    if( bRes == FALSE )
    {
        // フォルダが存在しません。
        return -1;
    }

    // フォルダが存在するのでウィンドウタイトルをセットします。
    if( ::IsWindow( g_hEditFolderWnd ) )
    {
        // ウィンドウが存在するので表示します。
        ::SetWindowText( g_hEditFolderWnd, p_pchFolderPath );
    }

    CStringArray cFolderStrAry;

    // 最初のファイルを取得します。
    WIN32_FIND_DATA stWin32FindData;
    HANDLE hHandle = NULL;
    hHandle = FindFirstFile( "*", &stWin32FindData );
    do
    {
        // ストップポイント２。
        if( g_bIsStop == true )
        {
            return iNum;
        }

        if( stWin32FindData.dwFileAttributes 
                & FILE_ATTRIBUTE_DIRECTORY )
        {
            // フォルダなので取っておきます。
            cFolderStrAry.Add( stWin32FindData.cFileName );
        }
        else if( _stricmp
                ( stWin32FindData.cFileName
                , p_pchFileName 
                ) == 0 )
        {
            // ファイル名が一致しました。
            ++iNum;
            TRACE( "%s\n", p_pchFolderPath );
        }

        // 次のファイルを取得します。
    }while( FindNextFile( hHandle, &stWin32FindData ) );

    // ハンドルを閉じます。
    FindClose( hHandle );

    // フォルダに対して再帰呼び出しをします。
    for( int iF1 = 0; iF1 < cFolderStrAry.GetSize(); ++iF1 )
    {
        if    (
            ( cFolderStrAry.GetAt( iF1 ) == "." ) ||
            ( cFolderStrAry.GetAt( iF1 ) == ".." )
            )
        {
            // . と .. はスキップします。
            continue;
        }

        // フォルダを連結します。
        CString cPathStr = p_pchFolderPath;
        if    (
            ( cPathStr.GetAt
                ( cPathStr.GetLength() - 1 ) != '\\' ) ||
            (
                ( cPathStr.GetAt
                    ( cPathStr.GetLength() - 1 ) == '\\' ) &&
                ( _mbsbtype
                    ( (const unsigned char *)(LPCTSTR)cPathStr
                    , cPathStr.GetLength() - 1 
                    ) == 2 )
            )
            )
        {
            // 最後に \ がなければくっつけます。
            cPathStr += "\\";
        }
        cPathStr += cFolderStrAry.GetAt( iF1 );
        // 再帰呼び出しします。
        iNum += CountMatchFile( cPathStr, p_pchFileName );
    }

    return iNum;
}

void StartCountMatchFile( void *p_p )
{
    // 検索を開始します。
    g_bIsStop = false;
    int iCount = 0;
    iCount = CountMatchFile( "D:\\", "readme.txt" );

    // 結果をセットします。
    g_iMatchNum = iCount;

    // ダイアログを閉じます。
    if( ::IsWindow( g_hSearchingDlgWnd ) )
    {
        // ウィンドウが存在するので閉じます。
        ::SendMessage
            ( g_hSearchingDlgWnd
            , WM_COMMAND
            , MAKEWPARAM( IDCANCEL, 0 )
            , 0
            );
    }
}

void CSearchingDlg::OnCancel() 
{
    // 検索をストップさせます。
    SetStopOn();

    CDialog::OnCancel();
}

BOOL CSearchingDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();

    // ダイアログのウィンドウハンドルをセットします。
    g_hSearchingDlgWnd = GetSafeHwnd();
    
    // エディットボックスのウィンドウハンドルをセットします。
    g_hEditFolderWnd = ::GetDlgItem( GetSafeHwnd(), IDC_E_FOLDER );

    // 検索開始します。
    HANDLE hThread;
    hThread
        = (HANDLE)_beginthread( StartCountMatchFile, 0, NULL );

    return TRUE;
}

『長！』
「さらに、 SearchDlgDlg.h に関数宣言をひとつ追加」

// SearchDlgDlg.h
// 略...

class CSearchingDlg : public CDialog
{
// 略...
};

// この下の行を追加。
int GetMatchNum();

『あー、この前やった他のファイルから呼び出すってヤツね』
「というわけで次回に続く！」
『ええっ！？』

/*
    Preview Next Story!
*/
『コードの紹介だけー？』
「それだけなのに、行数かなりオーバーしてるし」
『なんか計画性ないわねー』
「ごめん……」
『というわけで次回』
＜ Version 14.32 スレッドからダイアログに表示する、の続き ＞
「につづく！」
『ま、次回は説明をバリバリってことね』
「そゆこと」

////////////////////////////////////////////////////////////////////
/*                ２００５年３月２１日（月）の更新                */
http://www.kab-studio.biz/index.html

・ほとはー外伝３に１ページ追加
　三人合体ホットハーブ 外伝３に P.10 を追加予定。

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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
http://www.kab-studio.biz/nikki2/
・購読登録を解除したいときにはこのページで行なってください。
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 - 2005 ALL RIGHTS RESERVED.
        http://www.kab-studio.biz/
        info@mail.kab-studio.biz
*/
////////////////////////////////////////////////////////////////////

