#pragma twice

KAB-studio > プログラミング > #pragma twice > 142 Version 7.22 情報の見つけ方

#pragma twice 142 Version 7.22 情報の見つけ方

前のページへ 表紙・目次へ 次のページへ

 Version 7.22
情報の見つけ方

というわけで、デバイスコンテキスト編は今回で終了
なにぃ! なんかえらい中途半端じゃない!
確かに……ホントはもっと色々教えようと思ったんだけど、長く続けるよ
りは切りのいいところで終わらせた方がいいかなと思って
他に教えようと思ったことって?
メモリデバイスコンテキストとか、あとビットマップファイルの保存方法
とか
ななななんか難しそう
特にビットマップファイルの方はね。あまり詰め込まない方が
うんうん、その方がいい
だからここまで。で、今回は〈情報〉ってものについて。デバイスコンテ
キスト関係って、細かいルールがあったでしょ
全部ハンドルで操作する、 Create したら Delete する、アニメーション
するときはタイマーを使わないと止まっちゃう、でもタイマーは使えない
こういうルールの調べ方。僕の方でも全部教えきれるわけじゃないから

またそういうふうに義務を放棄するー
それは違うよ、火美ちゃん
へ?
今のウィンドウズシステムならともかく、これからいろんな技術が出てく
るでしょ。そういう技術についていかなきゃ
これからはやっていけない、そのためにも情報収集が
必要不可欠ってこと。今はその情報収集のための下地作りをしてるって段
階かな
まだ下地……
まだまだ下地
道は長いのねー
まーね。さて、まず情報収集の基本、それは MSDN 
 API や MFC を調べる時に使うリファレンスだね
単純に API を使うって時にはこれで調べればOK
引数とかは分かるよね。でもさ、何かしたいって時にどの API を使えば
いいかって時はどうするの?
一番簡単なのは MFC のリファレンスを使うこと。 CDC のメンバ関数一覧
を見てみて
 CDC の……【クラスメンバ】ってのだよね。げ、メンバ関数がいっぱい
ある〜
たとえば塗り潰しをしたい時にはそのページから〈塗り〉とか検索すれば
いいわけ
お、 FillRect() が見つかった
そうやってそれらしいメンバ関数を見つけて、色々試せば見つかると思う

それってテキトーに試してみるってこと?
まーね。これは、何かする時のヒントを得るための方法、かな。そのまま 
CDC のメンバ関数を使わずに API を使ってもいいし、この関数を元にイン
ターネットで調べれば
他の方法が見つかるかもしれない?
そゆこと。使用例も見つかるだろうしね。インターネットじゃなく MSDN 
内で検索しても結構見つかると思うよ
 FillRect() ひとつでも結構あるね
さらに、 FillRect() の API 版を調べてみて
 "GDI:Platform SDK" ってのを選べばいいんだよね。う、英語だ
下の方に "Filled Shapes Overview" ってあるでしょ
ほい。う、まだ英語だ
この "Filled Shapes" ってページから、塗り潰し関係のことが詳しく書
いてあります
へー、楕円とかもあるんだね。英語だけど
さらに MSDN の【目次】を見てみて
これって前に見たね
 Ver 5.07 ( No.072 ) で見たね。これを見ると、 "Filled Shapes" が 
GDI の項目の下に入ってるのが分かるでしょ
ペンとかブラシとかと同じに、塗り潰しも GDI のひとつなのね
広義の GDI だとそうなるのかなぁ。僕の感覚だと、 GDI っていうとペン
とかブラシとかを指すかな
なんかあいまいねー
と、 "Filled Shapes" のすぐ上に "Device Contexts" があるね
ホントだ、これを読めばデバイスコンテキストのことが分かるのね
そう。たとえば、この先の "Operations on Graphic Objects" ってペー
ジには、ペンとかの GDI オブジェクトは、 SelectObject() で元に戻して 
DeleteObject() しなさいって書いてあるでしょ
英語でね
っつーかこのくらい読めなきゃ駄目
げ! やっぱり?
この MSDN の英文は〈型どおり〉の書き方がされてるから、ちょっと単語
を憶えれば他のページも読めるようになるよ
そういうもん?
そういうもの。それに……
それに?
こういうのをちゃんと読んでなかったから、 ReleaseDC() を忘れてたっ
てのもあるし
げ、そうなんだ
確かに MSDN を読むのは結構辛いけど、でもこれはしっかり読まなきゃ

はーい
って言っても……たとえば、 WM_TIMER のリファレンスを見て
ほい。って見ても、なんかよく分かんない……
関数と違って、メッセージはちょっと書式が違うから、メッセージのシス
テムを知らないとよく分からないかも。特に、最後の Remarks の所に、前
回教えたタイマーの優先順位のことが書かれてるんだけど
まったくもって意味不明
この中に出てくる GetMessage() って API や、【メッセージキュー】っ
てものが何なのか知らないと分からないはず
うんうん
この辺は MFC に隠されてるメッセージシステム。それを知らないとどう
しようもないってところかな
いつか教えてもらったら、ってところね
そうそう。そういう点でも、今は下地作り。僕はこれがちゃんとできれば
あとは問題ないと思ってるから
どゆこと?
初心者によくあるのが、何が分からないのか分からないって状況。まずは
それを無くすために、必要最小限の知識を身に着けて欲しいわけ
それを身に着ければ、検索とかで調べれば分かるわけね
そうなるはず。特に検索で調べにくい部分はね。さっき SelectObject() 
の部分を例に出したけど、実際にこれを MSDN を読んで知るってのはかなり
大変だと思うよ
だから、代わりに水希ちゃんが教えてくれた
そういうこと。今回のでデバイスコンテキストの基本的な押さえたかな。
ただ、やっぱり教えきれないけどね。たとえば……ちょっと、直線の引き方
を調べてみて
ほい。さっきの方法だと、 CDC のメンバでっと。む、 LineTo() っての
が怪しい!
うん、線を引くなら LineTo() でOK。でも引数見てみて。 X と Y 、つ
まり1点の座標しか渡してないでしょ。直線なら2点必要じゃない?
そういえば。これを見ると……〈現在点〉ってのから線を引くらしいけ
ど、それってどこ?
こういう時のいくつかの方法。まずは MSDN 内で〈現在点〉で検索
ほい! …… LineTo() しか当たらなかった……
というわけで、特に日本語の用語は統一されてなかったりするから気を付
けて
あうー
ふたつめの方法は、 CDC のメンバの中で関連性のあるのを探してみる
ほい。あ、すぐ上にある MoveTo() が怪しい!
そう、それが正解。まずこの MoveTo() で現在位置を移動して LineTo() 
を呼べば LineTo() で指定した座標まで直線が引かれます
おー
似た方法として、 LineTo() の API の方のリファレンスを見てみて
ほい。あ、下に MoveToEx() がある! って、 Ex() ?
 MoveTo() は API ではもう使われてないみたいだね。それに置き換わっ
たのが MoveToEx() 
 MFC はその古いの使ってるの?
使ってますね……そういうのが不安な場合もあるから、 MFC を使う場合
にも API を調べるって手もあるかな
その方が安全ね
あとは、 LineTo() で検索すればサンプルコードが見つかるでしょ
サンプルコードには MoveTo() か MoveToEx() かが使われてるね
これを見れば一目瞭然。ただ、これだけ見るとどっちを使えばいいのかと
か分からないから
 API リファレンスも見よう、ってことね
使用例は MSDN じゃなくインターネットで調べた方がいい場合もあるし、
良くない場合もあるし
良くない場合?
 API の名前が普通の場合には、ウィンドウズのじゃなく他の OS やライ
ブラリの関数が引っかかっちゃう可能性があるから
 MSDN なら MFC か API ぐらいだもんね
ま、調べ方はこんな感じ。インターネットよりもまずは MSDN の方がいい
かな
ってゆーか、インターネットにも MSDN ってあるよね
うん、マイクロソフトのホームページにね。どっち使ってもいいけど、
Visual C++ に付いてるのの方がいいと思うけど
その方が早いけどね……
というわけで、ここまででデバイスコンテキスト編は終了
次回からは?
 MFC を使わずにダイアログを作ってみます
……それが簡単なのか難しいのかすら分からないんだけど
今まで、ダイアログを作るのってどういうふうにしてきた?
 AppWizard っての使って
 AppWizard を使ってダイアログを作ると、必要なプログラムが自動的に
作られるんです
ってことは、その自動的に作られる分を……
そう、自分で作るんです
やだ! それってすっごく面倒そう!
うん、面倒。でも VC 使いにとって避けては通れない道
なんで?
アプリによっては MFC を使わないで一から作らなきゃいけないものがあ
るから。そしてそれができるのは VC 使いだけ!
 VC 使いだけ!?
まぁそれはちょっと言い過ぎだけど、でも実際そうだと思うし、 VC 使い
にはそれくらいのレベルを求められるからね
それくらいできてないといけない、と
ま、めんどくさいだけで難しくはないと思うから
ホントかなー
たぶん

/*
    Preview Next Story!
*/
 MSDN って、読んでも全然分からない……
分かりやすく書こうって気はないみたいだからなー
ってゆーか、水希ちゃんはどうやって分かったの?
そうだね、いろんな本で、かな
 MSDN だけじゃダメ?
意外な本に意外なことが書かれてたりするからねー
あたしにとってはそれが水希ちゃんね
というわけで次回
< Version 8.01 ウィンドウズ、はじめの一歩 >
につづく!
次回からはさらにあまり載ってないことを教えるからねー
ま、その方が教わりがいがあるけどねー
 
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
RSSに登録
del.icio.us 登録する
Yahoo!ブックマーク 詳細を表示 users
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
 
このページは、Visual C++ 6.0を用いた C++ 言語プログラミングの解説を行う#pragma twiceの一コンテンツです。
詳しい説明は#pragma twiceのトップページをご覧ください。