ウィンドウで操作中、main関数のwhile文で処理

#include <windows.h>
#include <iostream>

// グローバル変数
HWND g_hWnd;
bool g_running = true;

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch (message) {
    case WM_DESTROY: {
        PostQuitMessage(0);
        return 0;
    }
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}

int main() {
    HINSTANCE hInstance = GetModuleHandle(NULL);

    WNDCLASS wc = { 0 };
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
    wc.lpszClassName = L"WindowClass";

    RegisterClass(&wc);

    g_hWnd = CreateWindowEx(0, L"WindowClass", L"Interactive Window", WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 400, 200, NULL, NULL, hInstance, NULL);

    ShowWindow(g_hWnd, SW_SHOW);

    MSG msg;
    while (g_running) {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            if (msg.message == WM_QUIT) {
                g_running = false;
            }
            else {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        else {
            // ここにメインの処理を記述する
            // 例えば、キー入力をチェックしてescキーが押されたら g_running を false に設定する
            if (GetAsyncKeyState(VK_ESCAPE) & 0x8000) {
                g_running = false;
            }

            if (GetAsyncKeyState(VK_UP) & 0x8000) {
                std::cout << "やっほー"<< std::endl;
            }

            // ここに追加の処理を記述する
            // この例では、何か重要な処理を行っていると仮定し、その結果を表示する
            //std::cout << "Processing..." << std::endl;

            // 少し待機する(適切なウェイト処理を行うことが望ましい)
            Sleep(100);
        }
    }

    // プログラムの終了処理などを行う

    return 0;
}