It seems to have an event loop though:
void app::run() { MSG messages; while (_running && GetMessage(&messages, nullptr, 0, 0) > 0) { TranslateMessage(&messages); DispatchMessage(&messages); } }