第2章 ウィンドウを作る その2


さて、今回はウィンドウクラスの登録部分を少しばかり 詳しく見てみましょう。ここでいうウィンドウクラスとは C++のクラスとは全く関係ありません。(念のため) sample01.cpp(イントロダクションにあります) の次の部分に注目してみましょう。

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; }

ここで、WNDCLASS構造体は、

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など)


[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Mar/15/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。