2011年2月15日火曜日

MFCと共に

MFC、VisualStudioProに備わるフレームワークをみょんな事から今回使う事になった。
他のライブラリと比べると割と古くからあるものなようだが、その辺の関連性は知らん。
そこらも含めてまとめていきたいな。うん。


◆ひとまずVSPro2010ゲッツ
とまぁ 学生なら無料配布キャンペーン を偶然この時期やっておりまして、
まぁ僕一応学生なので応募してみたら通ったので。ぐへへ。
これはなんだろ、こう、どーせ金出せない層へのプレゼントは将来性へのメリットのが大きいと判断したのかな。


◆では早速。
今回はMFCのMDI(マルチドキュメントインターフェース)のひながたを使わせてもらう。
まずこの解析から始まるのだろうか。ぱらっと見た限りでは、C++によるオブジェクト指向を本格的に実装していて、なんと初期の状態でIDEらしい綺麗なハリボテが出来ている。衝撃を受けた。
エディットウィンドウ、タイトルバーなどの改変はあるが、ほぼこの状態が新規作成時点で出来ていた。実際はハリボテ自体を評価したいのではないのだが・・・。


参考文献も色々探りはしたが、結局MSDNが公式マニュアルなようで、
クラスごとの機能説明はさながら、ちょっと深く、新しい機能となると英文に頼るしかなくなる事がまだ多いようだ。「その他文献を参照してください」がちらほら。。


◆まずクラスありき
http://msdn.microsoft.com/ja-jp/library/d06h2x6e(v=VS.80).aspx
まずMSDN.MFCのトップから、階層図でも見てほしい。
(このURLはVS80(VS2005)のものだが、最新の2010を見てもいい。が、追加機能による図の再編成が見づらいので、とりあえずの参考としてはこちらがいいと思う。)

まずCObjectありき。全てのクラスが継承している。
自分も非力ながらマイフレームワークを作っていた時期もあったが、この存在が大きく響く事を知っていた(これは失敗談である)。一言で言えば、全データのメモリ管理や、そのままファイル化など、いわゆるデータのシリアル化という事がこれで可能になる。スマートさに惚れ惚れする。
他、CWndによるウィンドウ管理のカプセル化、CCmdTargetによる明確なパイプを持ったユーザーとの対話など、根底に広がり学習すべき事が多い。夢がひろがりんぐ。

◆少し触ってみて
ひとまず僕自身が突っかかった事を挙げる。


・メソッドのオーバーライド時、基本クラスの元メソッドを呼び出してなかった
・初期化メソッドが用意されてるのを知らず、コンストラクタに処理を記述していた。
・似たような名前でまったく違う機能をごっちゃにしていた。(CListBoxとCListCtrl,これは派生元からして全く別の品である。)

とまぁ、C++クラスゆえの割と基本的なミスを連発していたという失敗談である。
もちろんクラスの風習、常套手段などは分かっていたはずだが、なぜだか忘れていた。経験は結構あったし頭でっかちというわけでもないはずだが、このようなヒューマンエラーの考察も必要そうである。