/* virtual */ signed
  application::message_loop()
  {
    TRACE("win::application::message_loop");

    bool done(false);
    MSG  msg = { 0 };

    while (!done && (!use_window_manager_count_ || win::window::manager::count())) {
      message_wait();
      
      if (::PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) {
        ::TranslateMessage(&msg);
        ::DispatchMessage (&msg);

        if (WM_QUIT == msg.message) {
          if (99 <= verbose_level_) {
            std::cout << support::trace::prefix() << "win::application::message_loop: "
                      << "received WM_QUIT" << std::endl;
          }

          done = true;          
        }

        if ((WM_APP == msg.message) && (WM_QUIT == msg.lParam)) {
          if (99 <= verbose_level_) {
            std::cout << support::trace::prefix() << "win::application::message_loop: "
                      << "received WM_APP/WM_QUIT, sending WM_QUIT" << std::endl;
          }
          
          ::PostQuitMessage(signed(msg.wParam));
        }
      }
    }

    return signed(msg.wParam);
  }
Пример #2
0
Error usi_wait_message(USIMessage *message)
{
    return message_wait(&(message->message));
}