その五では、CImageWindowクラスを最小限の構成で定義してみました。教本では、もう最初からフル装備になってるのですが、プロトタイプはコンストラクタ・デストラクタ・コールバック関数の三つの関数があればいいと思います。
細かいところに目を配ると、インスタンスやメインのウィンドウハンドルをCMascot.cpp 中のCImageWindow();のコンストラクタで利用するので、mascot.cpp の本文中で宣言されている HINSTANCE Instance; HWND MainWindow; の二つを取り込みたいので、mascot.h 中に extern 宣言をしてこれを使って経由して間接取り込みをしているところでしょうか。
その五での大きな注意箇所は、コールバック関数をstaticで宣言しているところでしょうか。この何故staticなのかに関しては、「なぜstaticをつけるのかという質問に対しての答え」(引用)http://d.hatena.ne.jp/bnkyshr/20110107/1294391512
に詳しく説明がされています。また教本の原文では、静的に定義されたコールバック関数内で使うカーソルに、静的メンバを割り当ててますが、これをコピー&ペーストするとややこしくなるので、レムにして標準カーソルを割り付けました。静的メンバ変数の関数外での実装に関しては、CMascotクラスの定義まで踏み込んだ時、Mapコンテナを配置することになるのでその時、触れてみようかと思います。取りあえず今は無視(・3・)
注目行は、この二か所かな..
[CMascot.h]
static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam);
[CMascot.cpp]
wcex.lpfnWndProc=(WNDPROC)&CImageWindow::WndProc;
クラスのメンバ関数をキャストしてコールバック関数として登録してるとこ。
最低限の定義と実装はしましたが、オブジェクトを生成していないので見かけ上は、プログラムを実行しても何の変化もありませんね。
コメント