ここで、WNDCLASS構造体は、WNDCLASS myProg; if (!hPreInst) { myProg.style =CS_HREDRAW | CS_VREDRAW; myProg.lpfnWndProc =WndProc; myProg.cbClsExtra =0; myProg.cbWndExtra =0; myProg.hInstance =hInstance; myProg.hIcon =NULL; myProg.hCursor =LoadCursor(NULL, IDC_ARROW); myProg.hbrBackground =GetStockObject(WHITE_BRUSH); myProg.lpszMenuName =NULL; myProg.lpszClassName =szClassNme; if (!RegisterClass(&myProg)) return FALSE; }
のように定義されています。typedef struct _WNDCLASS { UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; } WNDCLASS;
最初のstyleはCS_HREDRAW(水平方向のサイズ変更があったら 全体を描き直す)とか、CS_VREDRAW(垂直方向のサイズ変更で 全体を描き直す)などの定数を指定します。複数指定するには 「|」演算子を使います。これに関しては C言語編第49章を 参照して下さい。他に、CS_NOCLOSEなどもあります。 これは、ウィンドウのクローズボタンを使えなくする物です。 しかし、sample01.cppではこれを実行しないで下さい。 右上のバッテン印が薄くなりクリックできなくなるばかりか システム・メニューの「閉じる」という項目がなくなってしまいます。 (要するに終了できなくなる)普通はCS_HREDRAWとCS_VREDRAWだけ 覚えておけばよいでしょう。
次は、lpfnWndProcですが、ウィンドウプロシージャの名前を登録します。 ウィンドウプロシージャとはメッセージの処理を専門に行う関数とでも 覚えておきましょう。sample01.cppではWndProcという名前にしました。 この関数の名前は何でもいいのですが「何とかProc」というように付けておくのが 一般的です。
cbClsExtraとか、cbWndExtraはメモリ領域の追加設定の時 使いますが、普通は0にしておいて下さい。
hInstance読んで字のごとくインスタンスを登録します。
hIcon、hCursorウィンドウクラスにアイコン、カーソルを登録します。
hbrBackgroundこれは、背景を登録します。
lpszMenuNameメニューの名前を登録します。ない場合はNULLです。
lpszClassNameには、クラス名を登録します。他のウィンドウと重複しては
いけません。
今回は、ウィンドウクラスの登録関係について簡単に
解説しました。データ型と変数名と、自分で作った関数と、
あらかじめ用意されている関数(API関数といいます)
の混同をさけて下さい。特にデータ型の名前と変数の名前が
同じ物が(大文字と小文字で違いますが)よく出てきます。
(LPARAM lParamなど)
Update Mar/15/1997 By Y.Kumei