windowsプログラムを作るにあたって、

ウィンドウを作成するためには、

まず、ウィンドウクラスをシステムに登録する必要があります。

 

登録は、

WNDCLASSEX構造体に必要な情報を設定して、

RegisterClassEx 関数を使ってシステムに登録します。

 

まず、WNDCLASSEX構造体についてです。

 

Unicodeバージョンの宣言です。

Unicodeバージョンはタグの名称の最後にWがつきます。

(Wはワイド文字のWと思われます)

 

typedef struct tagWNDCLASSEXW {
  UINT      cbSize;
  UINT      style;
  WNDPROC   lpfnWndProc;
  int       cbClsExtra;
  int       cbWndExtra;
  HINSTANCE hInstance;
  HICON     hIcon;
  HCURSOR   hCursor;
  HBRUSH    hbrBackground;
  LPCWSTR   lpszMenuName;
  LPCWSTR   lpszClassName;
  HICON     hIconSm;
} WNDCLASSEXW, *PWNDCLASSEXW, *NPWNDCLASSEXW, *LPWNDCLASSEXW;

 

構造体メンバーについて見ていきます。

1.UINT      cbSize;

UINT型です。この構造体のサイズ (バイト単位)を設定します。

cbSizeのcbはcount of byteの略です。バイト数と言ったところでしょうか。

構造体のサイズは、sizeof(WNDCLASSEX)で求めることができます。

(WNDCLASSEXはWINDCLASSEXWに展開されます)

 

2.UINT      style;

クラススタイルを設定します。

クラススタイルは、CS_で始まる定数で定義されています。

ここでは、ウィンドウがサイズが水平方向に変更があった場合に再描画を行う。CS_HREDRAWと、垂直方向に変更があった場合に再描画をおこなう。CS_VREDRAWを設定します。

 

3. WNDPROC   lpfnWndProc;

WNDPROC型です。

ウィンドウプロシージャを設定します。

ウィンドウズプロシージャはシステムからウィンドウに送られたメッセージを処理する関数です。これはコールバック関数というもので、必要となったときにシステムから呼ばれるということから、コールバックという名称になってます。

ここでは、とりあえずデフォルトのウィンドウプロシージャ(DefWindowProc)を設定しておきます。

lpfnWndProcのlはLongのl、pはポインタ、fnは関数を表しています。

 

4.  int       cbClsExtra;

ウィンドウ クラス構造体の後に割り当てる余分なバイト数。使いませんので0を設定します。

 

5. int       cbWndExtra;

ウィンドウ インスタンスの後に割り当てる余分なバイト数。使いませんので0を設定します。

 

6.  HINSTANCE hInstance;

クラスのウィンドウ プロシージャを含むインスタンスへのハンドル。wWinMain関数で受け取ったインスタンスハンドルを設定します。

 

7. HICON     hIcon;

ウィンドウに表示されるアイコンのハンドル。ここでは、システムの既定のアイコンを使用しますので、NULLを設定します。

 

8. HCURSOR   hCursor;

ウィンドウに表示されるカーソルのハンドルで。ここでは、変更しないため NULL を設定ます。

 

9. HBRUSH    hbrBackground;

背景を塗るブラシのハンドル。色で指定もできます。

色で指定する場合は標準システム カラーである必要があります。COLOR_で始まる定数です。 

(値 1 を選択した色に追加する必要があります)。

 色の値が指定されている場合は HBRUSH型に変換する必要があります。

ここでは、(HBRUSH)(COLOR_BACKGROUND + 1)となります。

(HBRUSH)はCOLOR_BACKGROUND + 1をHBRUSH型へ変換(キャスト)します。

 

10.  LPCWSTR   lpszMenuName

ウィンドウのデフォルトのメニューです。ここでは、使用しませんのでNULLを設定します。

lpszMenunameのszはzeroでおわる文字列を示しています。C言語では文字列の終わりは0です。

 

11.  LPCWSTR   lpszClassName;

ウィンドウクラスの名前を設定します。システムに登録できる名前は一意なので、他のウィンドウクラスと重ならないようにします。

 

12.  HICON     hIconSm;

ウィンドウ クラスに関連付けられている小さなアイコンへのハンドル。

ここでは、アイコンがないのでNULLに設定します。

 

以上でウィンドウクラスの構造体を設定できました。