ウィンドウクラス構造体はよくいじっておこう
今回はマウスカーソルを変えたが、特性の指定という点ではstyleメンバーのほうがわかりやすいだろう。複数の挙動やモードのようなものが用意されており、それらをOR (|)でつなげて指定する。この指定はウィンドウプログラミングの至るところで見られるものだ。それぞれに意味があるので、その振る舞いを把握することが大切になってくる。
では、もう少しこの構造体をいじっていく。ウィンドウプログラミングを進めるにあたって最初の大切な部分なので、じっくりと遊んでいこう。
参考
WNDCLASSW構造体メンバ |
内容 |
style |
UINT。ウィンドウクラススタイルを指定。OR演算で複数指定可能。 |
lpfnWndProc |
WNDPROC。ウィンドウプロシージャへのポインタ。先にウィンドウプロシージャを作成しておき、ここでポインタを登録する。実際にウィンドウが表示されてからの動作はこのウィンドウプロシージャで行われる。デフォルト関数としてはDefWindowProc()が用意されている。自前のウィンドウプロシージャで処理を自前で行わないものをDefWindowProc()へ流すといった使い方をする。 |
cbClsExtra |
int。確保したウィンドウクラス構造体のあとに何バイト分確保するかを指定。システムは確保した領域をゼロクリアする。 |
cbWndExtra |
int。確保したウィンドウインスタンスのあとに何バイト分確保するかを指定。システムは確保した領域をゼロクリアする。 |
hInstance |
クラスに対するウィンドウプロシージャを含んだインスタンスへのハンドラ。 |
hIcon |
HICON。クラスアイコンへのハンドラ。NULLの場合にはデフォルトアイコンを使用。 |
hCursor |
HCURSOR。クラスカーソルへのハンドラ。NULLを指定した場合には、アプリケーション側でマウスがアプリケーションウィンドウに入ってきたときに明示的にカーソル形状を指定する必要がある。 |
hbrBackground |
HBRUSH。クラスバックグラウンドブラシへのハンドラ。背景色などを指定する。色を指定する場合にはスタンダードシステムカラーのうちのどれか一つを指定する必要があり、かつ、値に1を追加したものを使用し、さらにHBRUSHへ変換して指定する必要がある。NULLを指定した場合にはクライアント領域で描画が要求されたときに自分で背景を描画する必要がる。描画の必要性はWM_ERASEBKGNDメッセージを処理するか、BeginPaint関数のPAINTSTRUCT構造体のfEraceメンバーで確認できる。 |
lpszMenuName |
LPCTSTR。リソースファイルに表示されるクラスメニューのリソース名。NULLが指定された場合、このクラスに属するウィンドウはデフォルトメニューを持たないことになる。 |
lpszClassName |
LPCTSTR。nullで終わる文字列へのポインタ。最大256文字。なるべく一意な文字列になるようにする。 |
ウィンドウクラススタイル |
内容 |
CS_BYTEALIGNCLIENT |
ウィンドウクライアントエリアをバイトバウンダリに揃える(x方向)。ウィンドウの幅および水平方向の配置に影響する。 |
CS_BYTEALIGNWINDOW |
ウィンドウをバイトバウンダリに揃える(x方向)。ウィンドウの幅および水平方向の配置に影響する。 |
CS_CLASSDC |
クラスのすべてのウィンドウによって共有できる単一のデバイスコンテキストを割り当てる。ウィンドウクラスはプロセスに対して割り当てられるものなので、アプリケーションの複数のうレッドが同じクラスのウィンドウを作成することができる。同時に複数のスレッドが同じデバイスコンテキストを同時に使うことを試みることができる。その場合、システムはひとつのスレッドに対してのみ書き込み処理を成功裏に終わらせる。 |
CS_DBLCLKS |
クラスに属しているウィンドウの中でユーザがマウスのダブルクリックを行った場合ウィンドウプロシージャにダブルクリックメッセージを送信する。 |
CS_DROPSHADOW |
ウィンドウのドロップシャドー効果を有効化する。通常、この機能はメニューといった短命で小さく、ほかのウィンドウとのZオーダーを強調する目的で使われる。このスタイルのクラスから生成されたウィンドウはトップレベルウィンドウである必要がり、子ウィンドウにはならない。 |
CS_GLOBALCLASS |
ウィンドウクラスがアプリケーショングローバルクラスであることを指定。 |
CS_HREDRAW |
ウィンドウの移動やウィンドウクライアントエリアの幅が変更された場合にウィンドウ全体を再描画することを指定。 |
CS_NOCLOSE |
ウィンドウメニューの「終了」機能を無効化する。 |
CS_OWNDC |
クラスのそれぞれのウィンドウにそれぞれユニークなデバイスコンテキストを割り当てる。 |
CS_SAVEBITS |
クラスのウィンドウによって隠された部分のイメージをビットマップとして保存する。ウィンドウが削除されると保存されたビットマップを使用して隠されたほかのウィンドウを含む画面イメージを復元する(WM_PAINTメッセージは送信されなくなる)。このスタイルはメニューやダイアログボックスといった一時的に表示され、かつ、ほかの画面の動作が行われる前に削除されるウィンドウをう買う場合に便利。なお、ビットマップを格納うるためにメモリ割当が行われるようになるため、ウィンドウの表示に必要な時間は長くかかるようになる。 |
CS_VREDRAW |
ウィンドウの移動やウィンドウクライアントエリアの高さが変更された場合にウィンドウ全体を再描画することを指定。 |
マウスカーソル |
内容 |
IDC_APPSTARTING |
矢印と砂時計 |
IDC_ARROW |
矢印 |
IDC_CROSS |
十字 |
IDC_HAND |
手 |
IDC_HELP |
矢印と? |
IDC_IBEAM |
Iビーム |
IDC_NO |
スラッシュサークル |
IDC_SIZEALL |
東西南北矢印 |
IDC_SIZENESW |
北東と南西の二重矢印 |
IDC_SIZENS |
南北の二重矢印 |
IDC_SIZENWSE |
北西と南東の二重矢印 |
IDC_SIZEWE |
西と東の二重矢印 |
IDC_UPARROW |
垂直矢印 |
IDC_WAIT |
砂時計 |
システムカラー |
内容 |
COLOR_ACTIVECAPTION |
アクティブウィンドウのタイトルバーの色 |
COLOR_APPWORKSPACE |
マルチドキュメントインターフェースアプリケーションの背景色 |
COLOR_BTNTEXT |
プッシュボタンテキストの色 |
COLOR_GRAYTEXT |
灰色テキストの色 |
COLOR_HIGHLIGHT |
コントロール内で選択された項目の色。 |
COLOR_HIGHLIGHTTEXT |
コントロール内で選択された項目のテキストの色。 |
COLOR_WINDOW |
ウィンドウの背景の色。前景色はCOLOR_WINDOWTEXT。 |
COLOR_WINDOWTEXT |
ウィンドウ内のテキストの色。背景色はCOLOR_WINDOW。 |