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

    KAB-studio.h


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

    送信日： 2001/09/03(Mon) No.122
    配信数： 3750 ( Mag2 + Pubzine )
＊    発行元： まぐまぐ ( URL: http://www.mag2.com/  ID: 0000012198 )
＊    発行元： Pubzine ( URL: http://www.pubzine.com/  ID: 590 )
*/
////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////
/*              ２００１年８月２７日（月）の更新                  */
http://www.kab-studio.com/

・ KAB-studio.h お休み？
　謎な増刊号を配信しました。ただの広告って話も……。


////////////////////////////////////////////////////////////////////
/*              ２００１年８月２９日（水）の更新                  */
http://www.kab-studio.com/

・ Java で納得オブジェクト指向プログラミングプレ配信
　Java で納得オブジェクト指向プログラミングのプレ配信を８月２９日
（水）に行いました。皆さん読みましたか？
[ Java で納得オブジェクト指向プログラミング]
http://www.kab-studio.com/Programing/JavaOOP/


////////////////////////////////////////////////////////////////////
/*                ２００１年９月３日（月）の更新                  */
http://www.kab-studio.com/

・９月表紙壁紙公開
　毎月恒例の表紙壁紙です。今回は９月なのに水着です（爆）。結構いい感
じなので火美ちゃんファンは必見。ダウンロードは CG Gallery にて。
[CG Gallery]
http://www.kab-studio.com/CG/Gallery/


////////////////////////////////////////////////////////////////////
/*                        チョー普通な日記                        */
http://www.kab-studio.com/nikki2/

2001/08/19 (Sun)
　イラスト描きが中心。アレなのや９月表紙壁紙とか、タブレット直描きの
練習。オリジナル料理作ったりテレビ見たり。Ｋ１対プロレス……。そして
２ｃｈの「キッチン」ネタ。

2001/08/20 (Mon)
　お仕事は飛び入りファイル生成。でもプログラミングじゃない(汗)。 
char とゆーものが別に存在することに初めて気付く。 InsideWindows 到
着。 Java メルマガの購読登録数はまだ不明。

2001/08/21 (Tue)
　お仕事は JIS ＜＞ Shift JIS 変換。 Java の Socket がちょっと便利で
うらやましい。帰ってからはなにげに時間ない？　そして自炊は時間切れが
原因？

2001/08/22 (Wed)
　台風が来ない中、仕事は SMTP から Pro*C を使ったデータベースの助っ
人へ。 SQL コマンドをハードコーディング……。それを Perl で生成。そ
んな感じで残業〜。

2001/08/23 (Thu)
　残業２日目。引き続き昨日の Pro*C のをこつこつと、さらに前作ったの
の不具合関係でパニクる。つまんない一日……。

2001/08/24 (Fri)
　残業３日目。相変わらず単純作業で疲れるけど、少し慣れてきた？　まず
いまずい、慣れちゃいけない。そのためにも Java メルマガを購読登録して
ね。が、その購読登録数は８……。

2001/09/25 (Sat)
　休出１日目。思った以上にはかどらなかった……。しかも Java メルマガ
は、まぐまぐプレミアム版ウィークリーまぐまぐに載ったのに、購読登録数
変わらず８のまま……。世の中そんなに甘くない？

2001/08/26 (Sun)
　休出２日目。この５日間、慣れない仕事をこなした自分を褒めたい気分
と、もちっとできるでしょっていう無力感とを。で、明日から長崎旅行だか
らその準備もしないと〜。

2001/08/27 (Mon)
　作者夏休み長崎旅行のため休載

2001/08/28 (Tue)
　作者夏休み長崎旅行のため休載

2001/08/29 (Wed)
　作者夏休み長崎旅行のため休載

2001/08/30 (Thu)
　長崎旅行から帰ってきました。暑かったけどからっとしてました。１日目
は中華街、香港銀行、グラバー園、出島。２日目は諫早湾と島原。３日目は
平和公園。食はあまり……。今回のポイントは猫。仕事関係は無視。 Java 
メルマガは微増の１４。で、この日は仕事関係して、横浜のハンズメッセに
行って、コミックス買って、帰ってからは大ダビング大会。

2001/08/31 (Fri)
　９月表紙壁紙完成！　９月なのに水着。結構いい感じ？　初のタブレット
直描きでの表紙壁紙。不慣れな面もあるけど、完成形を見つつできるのはい
いです。基本は試行錯誤だけど。あと Java メルマガを１ヶ月分送信予約。
アニメはフルバがいい感じ。そして天草出身者。そして１時半までサービス
残業……。

2001/09/01 (Sat)
　ぷらとわ３話書いてからぱにぽに探し。人格チェックをしたら超マイペー
スという結果が。当たってるかも。タイタニックそれなりにいいかも。ホー
ムページ容量の増強で、イラスト増の準備とかも。


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

■　第二章　青年ふたり　−２−

　いつもの公園。
　芝生の上で、四者四様の部活動をしている四人。信吾は寝転がり、恭子は
水彩紙を目の前にしながらも筆は動いていない。俊雄はなんの用意もせず、
ただ中央の池を見ているだけだった。その脇に、松葉杖はない。
　舞ただひとりは、絵をせっせと描いていた。
　四人の間に、会話はない。
「……」
　先日の学校損壊騒ぎからそれなりに日は経っていた。ゴールデンウィーク
に入り、一息着けるはずだった。
　けれども、緊張感はいまだ溶けていない。
　何かが起こり始めている……それは判っているのに、その後が何も続いて
いない。学校はほとんど使い物にならず、プレハブ校舎で全生徒の三分の一
ずつが授業を受け、学校中に噂が回っている。
　幸運なことに、舞の戦っている姿を見た人はいなかった。でも、あの犬を
見た人は多く、血と水と氷に溢れた調理実習室と授業のできない校舎は怪事
件の証拠としてしっかりと残っていた。
「なんで――」
　信吾はそうつぶやいた。
「――……」
　言葉は、続かなかった。
　言葉は続かなくても、俊雄は、立ち上がった。
「どこから、どうやって、どんなふうに調べるの？」
　そうクールに言い放ったのは、舞だった。舞は俊雄の意外そうな笑顔を観
て楽しんだ。
「私に水を操る力があっても、マスコミとか国家権力と戦うのはちょっとき
ついかな」
「でもさ、なんか……じっとしていられないよ」
「あたしもそうかな」
　恭子も立ち上がる。
「あの犬には勝てなくてもさ、新聞社に訊きに行ったりとか、そういうこと
は私達にもできるし」
「だいたいさ、そのとんでもない相手っていうのがその国家権力とかマスコ
ミとかだったらどうするんだよ」
　信吾も立ち上がり、そう熱弁した。
「なーんか、みんな熱血してるね」
　あきれる舞に信吾は二の句を告げようとしたが、恭子はそれを止めた。
「そういえばさー、あの朴さんって言ったっけ、舞の王子様」
　俊雄はできるだけ表情に出るのを抑えて、舞は隠そうともせずに色めき
だった。
「誰が王子様よっ！」
「だってあの人、舞を護るために来たんでしょ？」
「母さんが勝手に頼んだだけだもの、第一あんなヤツいなくたって」
「ふうん？」
　恭子は（舞にとっては）いやらしく笑い、舞と俊雄を見比べた。
「でさ、その朴さんの所、行ってみない？」
「なんで！？」
　そう声を上げたのは俊雄の方だった。声が大きすぎたと自分でも感じて、
元々赤かった顔をさらに赤らめる。
「なんで……そいつの所に」
「そういえばその人、超能力で他の場所のものが解るって言ってたな」
　余計なことを信吾を睨み付ける二人。
「正確には、見えない女神様が助けてくれるそうだけどね」
「それだって本当かどうか」
「そうだよ、そんな占い師みたいなの信用できないよ」
「でも、その人に掛け合ってみてみるのが今の最善策なんじゃないかな」
「舞の家の近くってことは、ここからもそんなに遠くないわけだし」
「確かに理に適ってる……けど」
「けどぉ……」
                                                              (続く)


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~[KCM]
『はい、あ〜ん！』
「って、モニター越しにそんなことされても……」
『つまんないのー。先週もお休みじゃなかったしー』
「そのわりには Java メルマガ、購読登録少ないみたいだけど」
『でもヒット数は多いよね。注目はされてるんじゃない？』
「お金払うのにはやっぱり抵抗あるのかも」
『ネットショッピング自体、広まってないのかな』
「なんだかんだ言っても、気軽にってわけにはいかないのかも」
『じゃあ先週のあたしの苦労も水の泡！？』
「今のところはね」
『つまんないのー』
http://www.kab-studio.com/Programing/JavaOOP/
_______________________________________________________________[KCM]


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

　Version 7.02
デバイスコンテキスト

「まずは前回の復習から」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    ::SetPixel( hDC, 10, 10, dwColor );
}

『これで点を描いたんだよね』
「そうでした。１行目はやったから、今回は２行目と３行目」
『３行目もほとんどやっちゃったけどね』
「だから今回は２行目中心」

    HDC hDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );

『よくわかんない……』
「かもね。まず、ここで使ってるのは全部 API 。 MFC のじゃないから」
『頭に :: 付けてるからそうだよね。あ、でも 
m_cCanvasStatic.GetSafeHwnd() は MFC だよね』
「そう、それはダイアログに貼り付けた IDC_S_CANVAS のウィンドウハンド
ルを取得してる部分」
『 IDC_S_CANVAS を m_cCanvasStatic って変数に結び付けたんだよね。で
もあんなんでもウィンドウハンドルがあるんだ』
「 Ver 5.23 ( No.088 ) で言ったでしょ、ダイアログコントロールもウィ
ンドウの一種だって」
『それは知ってるけど、でもこれってなんか機能あまりないっぽいし』
「そういう例外はないってことだね。さて、その IDC_S_CANVAS のウィンド
ウハンドルを GetDC() って API に渡して、 HDC って型の変数で受け取っ
てます」
『 HDC 、 H が付いてるって事はハンドルなんだよね』
「そう、ウィンドウズの機能を操作する時はたいがいハンドルを使うから
ね。で、これが何のハンドルかが重要」
『もったいぶらないで言ってよ』
「はいはい。これは〈デバイスコンテキスト〉っていうののハンドル」
『でばいすこんてきすと？』
「英語で書くと Device Context 」
『だから HDC なんだ』
「 Device Context を直訳すると〈仕組みの状況〉」
『わけわからん……』
「うん、そう思う。そこで、デバイスコンテキストって言うのは〈画家〉だ
と思って」
『がかぁ？』
「そう、画家。ウィンドウに描画する時には、必ずこの画家に頼まなきゃい
けないんです。その〈頼んだ〉例のひとつが」

    ::SetPixel( hDC, 10, 10, dwColor );

「この SetPixel() は、第１引数に渡したデバイスコンテキストに〈１ドッ
トの点を打ってください〉って頼む API 」
『へー。なんか、こういうのってウィンドウに対してしそうだけど。たとえ
ば ::SetPixel( hWnd, 10, 10, dwColor ); みたいな？』
「そこがみそ。デバイスコンテキストは必ずしも〈ウィンドウ専属〉の画家
じゃなくて、たとえばプリンタとか、その他もろもろの出力用に使えるんで
す」
『ってことは今の hDC がプリンタ用のデバイスコンテキストのハンドルだ
ったら？』
「プリンタに、１ドットの点を打つように命令するわけ」
『ほー』
「って言っても、今回はウィンドウのことだけやるけどね」
『あ、そういえば、ウィンドウならどんなウィンドウでもデバイスコンテキ
スト持ってるの？　持ってるんだろうけど』
「持ってます、 IDC_S_CANVAS だって持ってるくらいなんだから」
『はいはい』
「たとえばさ、ボタンが〈ボタンらしく〉見えるのは、内部でデバイスコン
テキスト使ってそう〈ボタンらしく〉描画してるから」
『そっか、画面に見えてるののほとんどはウィンドウ、ってことはそのほと
んどがソトヅラ作るのにデバイスコンテキストが必要なんだ』
「そゆこと。だからダイアログもデバイスコンテキスト持ってます」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC = ::GetDC( GetSafeHwnd() );
    ::SetPixel( hDC, 5, 5, dwColor );
}

『どこ違う？』
「 GetSafeHwnd() を直接呼んでるでしょ。ってことは CAnimeDlg 自信、つ
まり Anime ダイアログのだから」
『ダイアログに描画できるの？　試してみよ……あ！　ちゃんと左上に赤い
点が！』
「タイトルバーのアイコンの下くらいだね」
『あれ？　でも座標が？』
「 0, 0 でもタイトルバーには被らないでしょ。実は、ウィンドウには
〈クライアントエリア〉と〈ノンクライアントエリア〉っていうのがあるん
です」
『くらいあんとえりあ？』
「ウィンドウは基本的にはウィンドウズのものでしょ」
『だからハンドルとか使わないと操作できないんだもんね』
「で、〈 Client 〉ってのは〈お客さん〉って意味。ここでのクライアント
は、そのウィンドウを使わせてもらってる側」
『つまりそのハンドルとか使ってる、あたし達ってことね』
「そゆこと。クライアントエリアはその使ってる側に提供されてる空間。だ
から、描画とかは普通ここにすることになってるんです」
『ってことはタイトルバーなんかはその〈ノンクライアントエリア〉って方
なんだ』
「そう、クライアントエリアじゃない、普通は描画できない部分を〈ノンク
ライアントエリア〉って言います」
『でも…… IDC_S_CANVAS だと、 0, 0 はちゃんと左上だよ？』
「うん、ノンクライアントエリアがあるのはダイアログとか普通のウィンド
ウとかだけ。たいがいは全部クライアントエリアかな」
『なーんだ』
「それに、ノンクライアントエリアもちゃんと描画できるんだけどね」
『そなの？』
「やってみようか」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC
        = ::GetDCEx
            ( GetSafeHwnd()
            , NULL
            , DCX_WINDOW | DCX_PARENTCLIP );
    ::SetPixel( hDC, 5, 5, dwColor );
}

『 GetDC() が GetDCEx() になった』
「これを使えば、ノンクライアントエリアも含めた、ウィンドウ全体に描画
できるデバイスコンテキストを取得できるから」
『うぉ、タイトルバーに赤い点が……』
「今はウィンドウのタイトルバーってデフォルトでグラデーションしてるけ
ど、前はなってなくて、自前でグラデーションさせるときに」
『こうやってタイトルバーに描画してたわけね。そういえば、こういうふう
にダイアログに描けるのに、なんでわざわざ IDC_S_CANVAS に描くようにし
たの？』
「あとあとのことを考えて、ってとこかな。元に戻して」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC = ::GetDC( GetSafeHwnd() );
    ::SetPixel( hDC, 5, 5, dwColor );
}

「これで SetPixel() の座標を変えてみるとわかるけど、 IDC_S_CANVAS ど
ころか、ボタンとかの上にも描画できるから試してみて」
『ちょっと値変えてビルドして実行……変えてビルドして実行……』
「面倒だったら for とか使ってみても」
『うげ、ホントだ！　ボタンの上に赤い点が……』
「って言っても」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    HDC hDC = ::GetDC( m_cCanvasStatic.GetSafeHwnd() );
    ::SetPixel( hDC, 10, 10, dwColor );
}

「で、また少しずつ SetPixel() の座標を変えてみて」
『げ！　 IDC_S_CANVAS を余裕ではみ出ちゃう！！』
「でしょう。こういうふうに、外の領域も描けちゃうんです、デバイスコン
テキストは。まぁダイアログの外は描けないけど」
『あ、これは大丈夫なんだ』
「で、あとで IDC_S_CANVAS からはみ出ないようにする方法を教えるから、
そのときに〈この範囲だけに描画する〉って目印に IDC_S_CANVAS を使うか
ら」
『ダイアログに直に描くと、そういうの面倒だもんね』
「ま、これはもうちょっと先の話だけどね。今回最後は、このコードの MFC
版の紹介」
『そういえば、ずっと API だけどその理由は？』
「ひとつは、ホントに操作するのは API だから」
『 MFC 使っても、結局は中で API 使ってるんだもんね』
「特にデバイスコンテキストとかはウィンドウズの中身に結構関わってくる
から、そういう〈中の仕組み〉をちゃんと知っとくのが重要かなって思うか
らね」
『なんか難しそ……』
「もうひとつの理由は、デバイスコンテキストまわりは、 MFC を使うと逆
に使いづらいっていうことがあるんだよね」
『そなの？　 MFC って便利に使うためのものじゃないの？』
「使いようによるっていうか、使い方にクセがあるっていうか……。ま、と
りあえずは見てみて」

void CAnimeDlg::OnBDraw() 
{
    COLORREF dwColor = RGB( 255, 0, 0 );
    CDC *pcDC = m_cCanvasStatic.GetDC();
    pcDC->SetPixel( 10, 10, dwColor );
}

『んーと、 HDC を使うクラスが CDC なんだよね。 HWND と CWnd の関係と
同じ？』
「そう、ほとんど同じ。こういうのは、 MFC の中で統一されてるからね」
『んーと、 m_cCanvasStatic から GetDC() ってメンバ関数呼んでるんだ』
「これは CWnd のメンバ関数。だから CDialog でも CEdit でも」
『呼べて、それでデバイスコンテキスト取得できるってことね。あれ？　な
んで CDC じゃなくてポインタなの？』
「そこが重要。それは次回に持ち越して、最後にその CDC のメンバ関数」
「 CDC::SetPixel() を呼ぶわけね。ってゆーか、 CDC のメンバ関数一覧見
たらなんかすんごくいっぱいあるね」
『描画って言ってももちろん１ドット打つだけじゃないからねー。これから
少しずつ紹介してくから。というわけで次回に続く！』

/*
    Preview Next Story!
*/
『それにしても API の数とか、ウィンドウズの機能ってすごく多いよね』
「プログラマーはそういうのも憶えないとね」
『ウィンドウズプログラマーはってこと？』
「今はシステムが複雑だから、 OS やシステムごとに憶えることあるかな」
『どんなプログラミングでも大変ってことね……』
「というわけで次回」
＜ Version 7.03 アタッチとデタッチ ＞
『につづく！』
「でもウィンドウズはかなり複雑な方だと思うけどね」
『げ！　そなの？』
「ま、ウィンドウズの憶えとけば他にも応用効くから」
『その言葉を信じるしかないか』


////////////////////////////////////////////////////////////////////
/*                ２００１年９月５日（月）の更新予定              */
http://www.kab-studio.com/

・Java で納得オブジェクト指向プログラミングスタート！
　とうとう Java で納得オブジェクト指向プログラミングの本配信がスター
トします！
　配信は９月５日（水）から。 Java プログラマーの方、オブジェクト指向
プログラミングをマスターしようと思っている方、お見逃しなく！！
[ Java で納得オブジェクト指向プログラミング]
http://www.kab-studio.com/Programing/JavaOOP/


////////////////////////////////////////////////////////////////////
/*              ２００１年９月１０日（月）の更新予定              */
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 - 2001 ALL RIGHTS RESERVED.
        http://www.kab-studio.com/
        info@kab-studio.com
*/
////////////////////////////////////////////////////////////////////




