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

    KAB-studio.h


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

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

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

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


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

2005/03/13 (Sun)
　KAB-studio オフラインミーティング！　読者の方々８名が来られました。
実際にはただの飲み会だけど（爆）。午後６時半に品川駅で集合。稲田屋
品川店へ。とりあえず乾杯してから自己紹介して歓談。かなり盛り上がりま
した。近くの天狗で二次会。オタネタは少なかったけど。話を戻して、今朝
は１１時起き。 JavaA2Z の単語追加とMachician書き。オフミやってよかっ
たなぁ。そしてオフミお疲れ様。

2005/03/14 (Mon)
　午前中は JavaA2Z の単語追加。午後は版権物イラスト。 Fate のキャラ
は描きやすい。 Machician の第７話をがりがりと。そしてオフミお疲れ
様。

2005/03/15 (Tue)
　昨日は深夜まで Machician 書き。今日はほとんど何もしなかった。公約
守ってない……。 Machician マンガ版。小説とマンガは違う？　明日の
失業認定日用書類。３月は減速。ストックできたりとか、スケジュールとか
の関係……。そしてオフミ。

2005/03/16 (Wed)
　失業認定日（初回）。失業していることを確認する日。失業していると前
回の失業認定日からの日数分、失業給付が受けられます。でも、ちゃんと
就職活動しているかの確認日でもあったり。朝９時２０分から１階で。
失業認定申告書と求職公開申込書を提出。質問５分で終了。２階に行って
返してもらった失業認定申告書を提出して、新しい失業認定申告書をもらっ
て完了。来週火曜ぐらいに振り込まれるはず。次回は４月１３日。ヨドバシ
川崎店まで散歩して ULYSSES とか購入。帰ってからは版権物イラストを描
いたり。なんかだらだらやってる……。でも今日描いたセイバーも結構似て
る？

2005/03/17 (Thu)
　Machician ラフ描き。紫恋は描きやすいけどうめは描きにくい……。写真
集で絵の練習。ゴールから絵を描く。そしてオフミお疲れ様。

2005/03/18 (Fri)
　一日中お絵かき。でも枚数はあまり多くない。体のパースがうまくいかな
い……。その分マンガは楽だ。 Machician の挿絵を描きたい。午後に
歯医者。土台を埋めたんで、来週は被せます。これでようやく一本。本屋で
本屋で渋谷ガーディアンガールズ１巻とか購入。サンデーGXの本が多い。

2005/03/19 (Sat)
　昨日深夜６時まで JavaA2Z の単語書き。一応９時に起きるも実際には
１０時起き。洗濯してぷらとわ書いてかぶヘッダーの準備して 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

■追加・更新単語

BigDecimal
浮動小数点リテラル
Double
double
実数
仮数部
指数部
浮動小数点
valueOf
Long
long
GregorianCalendar
Deprecated
推奨されていません
Date
Calendar
SimpleDateFormat
フォーマット
インヘリタンス
abstract
abstractメソッド
抽象メソッド
abstractクラス
抽象クラス
implements
interface
インターフェイス
class
extends
予約語
オーバーロード
ポリモーフィズム
オーバーライド
継承
サブクラス
スーパークラス
デフォルトコンストラクタ
コンストラクタ

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

　Version 14.32
スレッドからダイアログに表示する、の続き

「前回はソースコードだけでした」
『あれだけで、しかもまだ書いちゃダメってゆーし……』
「うん、エディットボックスとか用意してなかったから」
『え、ダイアログの方になんかしなきゃいけないの？』
「結果とか検索中のフォルダとか表示するでしょ」
『そういえば……』
「というわけで、まずはダイアログにコントロールを追加します。
【ファイル検索】ダイアログ、つまり IDD_SEARCHDLG_DIALOG を開いて」
『ダイアログエディタでだよね』
「もちろん。そこにエディットボックスを貼り付けて、 ID は
【IDC_E_MATCH_NUM】、スタイルの【境界線】をオフ、【読み取り専用】を
オンにして」
『？　これってなんの意味があるの？』
「やってみるとわかるけど、見た目がスタティックコントロールみたいにな
るでしょ」
『ほんとだ、文字だけみたい』
「でもエディットボックスだから、文字列をセットできるんです」
『なるほど、見た目はスタティックコントロールだけど、使い勝手は
エディットボックス、みたいな？』
「そういうこと。ここには検索結果、つまり一致した数をセットします」
『ほい』
「というわけで、 ClassWizard でこのエディットボックスの変数を作って」
『うわ、懐かしい作業を……メニューの【表示】−【ClassWizard】で、
【メンバ変数】のページで IDC_E_MATCH_NUM を選んで【変数の追加】っと』
「変数名は m_cMatchNumStr 、あとはそのまま【値】の【CString】で」
『ほいほい』
「次に、【検索中】ダイアログに【今検索しているフォルダ】を表示する欄
を作ります。【検索中】ダイアログ開いて」
『ほい』
「同じようにエディットボックスを貼り付けて、 ID は IDC_E_FOLDER 、
スタイルはさっきと同じ」
『ん、スタティックコントロールみたくなった』
「ただ、こっちは変数は作りません」
『え、どうして？』
「これはソースコードの説明の時に。それと、このダイアログの 
WM_INITDIALOG のイベントハンドラを作って」
『ダイアログが表示するときに送られるメッセージだね。メニューの
【表示】−【ClassWizard】開いて、【MFC ClassWizard】ダイアログの
【メッセージマップ】のとこで……』
「【オブジェクト ID】を【CSearchingDlg】にして、右の【メッセージ】で
【WM_INITDIALOG】を選んだら【関数の追加】押して【コード編集】」
『ん、 CSearchingDlg::OnInitDialog() できた』
「ここの段階で、 SearchingDlg.cpp には CSearchingDlg::OnCancel() と 
CSearchingDlg::OnInitDialog() のふたつのイベントハンドラが作られたこ
とになってると思います」
『うんなってる』
「この状態で前回のソースを見返してみて。 SearchDlgDlg.cpp のソースに
このふたつの関数があるでしょ」
『あ、ほんとだ』
「このふたつの関数の上に StartCountMatchFile() と CountMatchFile() 、
その他諸々を入れる、っていう形にしてください」
『それにしても長い……』
「って言っても、基本的にはこの前の検索と変わらないけどね。追加した機
能ひとつひとつ見ていこうか」

・検索対象フォルダの表示

『これはさっきの IDC_E_FOLDER に表示するんだね』
「そう。さっき説明したように、変数を使わず、直接ウィンドウハンドルを
使ってセットします。まず、そのための変数を用意します」

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

「次に、ダイアログの表示時に IDC_E_FOLDER のウィンドウハンドルをセッ
トします」

BOOL CSearchingDlg::OnInitDialog() 
{
// 略...
    // エディットボックスのウィンドウハンドルをセットします。
    g_hEditFolderWnd = ::GetDlgItem( GetSafeHwnd(), IDC_E_FOLDER );
// 略...
}

「 Version 5.26 ( No.091 ) で説明した方法で取得します」
『本当に API つかって直接セットしてるんだね』
「セットするのも API を使います」

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

『？　IsWindow() って？』
「これはウィンドウが存在してるかどうかチェックする API 。
CountMatchFile() って別スレッドで動いてるから、いつの間にかダイアログ
がなくなってる可能性があるから」
『げ、そういうのもチェックしなきゃいけないんだ……』
「 SetWindowText() はエディットボックスに文字列をセットする API 」
『さっきの Version 5.26 ( No.091 ) にも出てたのだね』
「具体例なら Version 5.27 ( No.092 ) の方がいいかな」
『で、なんで変数使ってセットしないの？』
「変数を使ってセットする方法だと、 MFC を使うことになります」
『そなの？』
「 CWnd::UpdateData() とか使うでしょ」
『そういえば、あれとかって API にはないよね……』
「結局が MFC が SetWindowText() とかしてるんだけどね。変数とか使って
分かりやすくしてるだけ。で、実は MFC は、マルチスレッドが苦手なんで
す」
『あ、そういえば前にそう言ってたね』
「 MFC の、特にウィンドウ関係はマルチスレッドを逆に複雑に使っている
から、別スレッドからの操作がうまくできないんです」
『げ……だから直接 API で？』
「そういうこと。次に説明する」

・検索終了時にキャンセルダイアログを閉じる機能

「も、同じように MFC の問題があるんです」
『げ”』
「基本的に、方法は同じ。ダイアログが作られるときにウィンドウハンドル
を取っておいて、検索が終わったらそれを使ってダイアログを閉じるだけ。
まずは取っておく変数」

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

「ここに、ダイアログが表示されるときにセットします」

BOOL CSearchingDlg::OnInitDialog() 
{
// 略...
    // ダイアログのウィンドウハンドルをセットします。
    g_hSearchingDlgWnd = GetSafeHwnd();
// 略...
}

「そして、検索終了時にこれを使ってダイアログを閉じます」

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

『あれ？　ダイアログ閉じるのって EndDialog() じゃなかったっけ』
「 Version 8.09 ( No.151 ) でそう教えたけど、ここではダメ」
『これも MFC の関係？』
「そういうこと。 EndDialog() だと API で直接ダイアログ閉じちゃうか
ら。そうじゃなく、 MFC を通してダイアログを閉じてもらう必要があるん
です」
『それがこの SendMessage() ？　えっと、 WM_COMMAND って……そっか、
ボタン押したとき、ってメッセージ送ってるんだ』
「そういうこと。これも Version 8.09 ( No.151 ) で説明したね。あの時
は受け取る時だったけど、今回は送る場合」
『こうやって送ると…… IDCANCEL ボタンが押されたってなるんだ』
「そういうこと。そうすれば MFC の方、つまり CSearchingDlg クラスで処
理してくれるから大丈夫」
『……って、それってかなり難しいかも……知らなきゃわかんないよ』
「僕も知らなかったよ」
『え”？』
「試してうまくいかなかったから調べただけ……こういうところもマルチ
スレッドの難しいところかも」
『ううう……』
「最後に」

・検索結果の表示

「これは前回と同じような感じ」

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

「という形で変数と関数を用意して」

// SearchDlgDlg.h
// 略...
int GetMatchNum();

「というふうにして呼べるようにして」

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

「ここで出力」
『 CString::Format() 使って文字列に変換して、あ、 m_cMatchNumStr が
さっき変数作った IDC_E_MATCH_NUM だね』
「これでダイアログに一致結果が表示されるから」

/*
    Preview Next Story!
*/
「次回はマルチスレッド編最終回！」
『長かった……って感じもしないかな』
「マルチスレッドだけ見ると少ないからね」
『そういえば前半は同期オブジェクトだった……』
「というわけで次回」
＜ Version 14.33 マルチスレッドのまとめ ＞
『につづく！』
「もちろん  Version 15 の話や、さらにその先の話も！」
『つかいつまで続くのー！　もう６年だよー！！』

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

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


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

・このメールを返信しないでください。
・ご意見・ご希望・ご感想は[チョー普通な日記]よりお送りください。
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
*/
////////////////////////////////////////////////////////////////////

