読者です 読者をやめる 読者になる 読者になる

メッセージループの抜け方

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