メッセージループの抜け方
VSが作ったWinMainには↓のようなメッセージループって呼ばれているループがある
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow)) { ... 省略 ... hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32TEST)); while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } return (int) msg.wParam;
このGetMessage() 関数はWM_QUITメッセージを受け取ったときに0を返すらしい
なので,メッセージループを抜けて終了したいときにPostQuitMessage()っていう関数を呼び出せばOK
おまけ
警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。
while (GetMessage(lpMsg, hWnd, 0, 0)) ...
このようなコードを作成すると、GetMessage 関数が失敗して -1(0xFFFFFFFF、つまり TRUE)が返った場合、ループが持続し、致命的なアプリケーションエラーを発生させる可能性があります。
( ゚Д゚)ポカーン...
よい子はVisual Studioが自動生成するソースをそのまま使わないようにね☆
BOOL stat; while (stat = GetMessage(&msg, NULL, 0, 0)) { if (stat == -1) { return False; } ... }
これでOK