/

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 );



この関数はメッセージキューに新しいメッセージがエンキューされるまで処理を返さない