Windowsプログラムを作成する場合、昔はメッセージループを、以下のようにしていました。(VC++6.0は以下のソースを吐きます。)
MSG msg; while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage( &msg ); DispatchMessage( &msg ); }
しかし、現在は以下のようにしなければなりません。
MSG msg; BOOL bRet; while ( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0 ) { if (bRet == -1) { //handle the error and possibly exit } else { TranslateMessage (&msg); DispatchMessage (&msg); } }
GetMessageの仕様を確認してみると、エラーが発生した場合、-1 が返ります。たとえば、hWnd パラメータで無効なウィンドウハンドルを指定した場合や、lpMsg で無効なポインタを指定した場合は、エラーが発生します。
と書かれています。猫でもわかるプログラミングさんのところにも書かれていますが、従来の書き方では、エラーが発生した場合にループから抜け出すことができません。戻り値のチェックをするようにしましょう。