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 で無効なポインタを指定した場合は、エラーが発生します。
と書かれています。猫でもわかるプログラミングさんのところにも書かれていますが、従来の書き方では、エラーが発生した場合にループから抜け出すことができません。戻り値のチェックをするようにしましょう。