HWND hWnd;
WNDCLASS wc;
ATOM atom;
// ウィンドウクラスの登録
wc.style = CS_HREDRAW | CS_VREDRAW; // ウィンドウの基本的な設定を行うビットフラグを指定
// 水平方向に変更された時に再描画することを表すCS_HREDRAW
// 垂直方向に変更された時に再描画することを表すCS_VREDRAW
// これらを論理和で結合した値を代入
wc.lpfnWndProc = DefWindowProc; // ウィンドウの動作を処理する関数へのポインタを指定
// ウィンドウに何らかのイベントが発生する度に呼び出されるイコールバック関数
// この関数を一般にウィンドウプロシージャと呼ぶ
// ウィンドウプロシージャはあらゆる動作を適切に処理できなければならないが、
// それらを全てプログラムでするのは大変なのでDefWindowProc()関数を利用
wc.cbClsExtra = 0; // 補助メモリ、使わないので0
wc.cbWndExtra = 0; // 補助メモリ、使わないので0
wc.hInstance = hInstance; // このウィンドウクラスを登録するアプリケーションのインスタンスハンドルを指定
// WinMain()関数が引数で受け取ったインスタンスハンドルを設定
wc.hIcon = NULL; // アイコンのハンドルを表す、NULLは標準のアイコン
wc.hCursor = NULL; // カーソルのハンドルを表す、NULLは標準のアイコン
wc.hbrBackground = ( HBRUSH ) COLOR_BACKGROUND + 1; // クライアント領域をどのように塗りつぶすかを設定
// HBRUSHはブラシのハンドル
wc.lpszMenuName = NULL; // ウィンドウのデフォルトメニューとなるメニューの名前
wc.lpszClassName = APP_NAME; // この構造体を割り当てる一意なクラス名
/*
WNDCLASS構造体の初期化が終われば、次にこれをWindowsに登録する必要がある
新しいウィンドウクラスを作成するにはRegisterClass()関数にWNDCLASS構造体へのポインタを渡す
ATOM RegisterClass( const WNDCLASS *lpwc );
この関数は構造体に設定されている情報を基に新しいウィンドウクラスを作成する
成功すれば登録されたクラスを一意に示す整数値を返す
失敗すれば0を返す
この値はシステムがグローバルに管理している値でATOMと呼ばれる
ATOMはウィンドウクラスの登録を削除する場合等に利用する