MSG msg;
// ウィンドウクラスの登録
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( NULL, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = ( HBRUSH ) COLOR_BACKGROUND + 1;
wc.lpszMenuName = NULL;
wc.lpszClassName = APP_NAME;
if( !RegisterClass( &wc ) ){
MessageBox( NULL, TEXT( "ウィンドウクラスの作成に失敗しました。" ), NULL, MB_OK );
return 0;
}
// 登録したウィンドウを生成
if( CreateWindow(
APP_NAME, TEXT( "WM_CREATE Sample" ), WS_OVERLAPPEDWINDOW | WS_VISIBLE,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL
) == NULL ){
return 0;
}
// メッセージループ
/*
メッセージキューからメッセージを取得するにはGetMessage()関数を用いる
この関数は指定したウィンドウのメッセージをMSG構造体に格納
BOOL GetMessage(
LPMSG lpMsg,
HWND hWnd,
UINT wMsgFilterMin,
UINT wMsgFilterMax
)
lpMsgに指定した構造体にhWndのメッセージを抽出
ウィンドウを指定せず、このアプリケーションに関連する全てのメッセージを受け取る場合はhWnd引数にNULLを指定
wMsgFilterMin、wMsgFilterMaxは取得するメッセージを特定の範囲に限定したい場合に利用するフィルタ
通常は全てのメッセージを処理する必要があるのでこれらの引数には0を指定
メッセージループでは、常にGetMessage()関数を呼び出してメッセージが発生するのを待つ
ウィンドウに何らかのアクションが発生すればGetMessage()関数がメッセージを取得し、
そのメッセージに基づいて必要な処理に導く
GetMessage()関数は処理するメッセージが発生するまで制御を返さない
もしGetMessage()関数がメッセージの到着を待たずに制御を返せば、
処理するメッセージがないのにループ処理を計算し続けることになり、CPUに多大な負担を掛けることになる
GetMessage()関数を使わずにメッセージの到着を待つにはWaitMessage()関数を使う
BOOL WaitMessage( void );
この関数はメッセージキューに新しいメッセージがエンキューされるまで処理を返さない