RegisterClass

RegisterClassは、ウィンドウクラスを登録するWindowsAPI・・・。

RegisterClass function (Windows)

ウィンドウクラスは、ウィンドウを作るときの雛型となる情報・・・。
これまでは、予め定義されているもの("STATIC"など)を使っていたが、今回は自分で独自のウィンドウクラスを定義してみる・・・。
ウィンドウクラスはWNDCLASS構造体変数に値を設定し、RegisterClassに渡すことで、登録できる・・・。

ウィンドウハンドルhWnd、メッセージmsg、ウィンドウクラスwcを用意・・・。

ウィンドウクラスの各項目をwcに設定・・・。

lpszClassNameはウィンドウクラス名・・・、今回は"RegisterClass"と設定する・・・。
styleは、大抵CS_HREDRAW | CS_VREDRAWにしておく・・・。
lpfnWndProcには、DefWindowProcというAPIを指定しておき、既定の処理をそちらに任せる・・・。いずれ、また登場するので、詳しくはそのときに説明する・・・。
hInstanceは、_tWinMainのものを・・・。
hIconは、アプリケーション既定のものをLoadIconで・・・。
hCursorは、矢印をLoadCursorで・・・。
hbrBackgroundは、背景・・・。GetStockObjectで白ブラシをセット・・・。
あとはいらない(メニューなんかも)ので、NULLや0をセットしておく・・・。

設定したら、wcをRegisterClassで登録する・・・。

0が返ってこなかったら、登録できたとみていい・・・。

この"RegisterClass"ウィンドウクラスをCreateWindowの第1引数に指定して、ウィンドウ作成・・・。

ウィンドウを表示・・・。

でウィンドウの表示状態を維持するためにメッセージループを作る・・・。

whileループなのだが、条件式がTRUEなので、常に真の無限ループ・・・。

GetMessageでメッセージを取得する・・・。
そのメッセージが、

WM_LBUTTONDOWN、つまり「マウスの左ボタンが押されたとき」なら、メッセージループを抜けるようにする・・・。

でウィンドウ破棄・・・。

つまり、このウィンドウは左クリックしたらウィンドウを閉じて終了するようになっている・・・。
ただし、この処理が有効なのはクライアント領域(白いところ)のみで、それ以外の部分には反応しないので注意・・・。

実行してみると、

f:id:BG1:20150306174238p:plain

が表示され、大部分の白いところでクリックすると、ウィンドウが閉じてアプリが終了する・・・。

Sample/RegisterClass.cpp at master · bg1bgst333/Sample · GitHub