いつもお世話になっております。
只今、Windows10上でC言語とWin32APIを使用し、VisualStudioでコンパイルしながらWindowsプログラミングを勉強しています。

今回、質問させて頂きたいのは、「猫でもわかるWindowsプログラミング第4版」の第5章簡易タイピングソフトを作るの回で、掲載されてあったコードを実行してみたのですが、ウィンドウが起動しても、真っ白の状態でタイピングの問題が出題されません。
グローバル変数のTCHAR szMondai[32], szInput[32], szCheck[32];あたりが怪しいと思うのですが、アドバイスよろしくお願いいたします。

#pragma comment(lib, "winmm.lib")
#include <windows.h>
#include <time.h>

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
ATOM InitApp(HINSTANCE);
BOOL InitInstance(HINSTANCE, int);
int TypeStart(HWND);


TCHAR szClassName[] = TEXT("Key01");
TCHAR szMondai[32], szInput[32], szCheck[32];
int iMon;
DWORD dwStart, dwEnd;
BOOL bStart = FALSE, bSeikai = TRUE;

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst, LPSTR lsCmdLine, int nCmdShow) {
    MSG msg;
    BOOL bRet;

    if (!InitApp(hCurInst))
        return FALSE;
    if (!InitInstance(hCurInst, nCmdShow))
        return FALSE;

    // メッセージ取得
    while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
        if (bRet == -1) {
            break;
        }
        else {
            TranslateMessage(&msg);     // メッセージ変換
            DispatchMessage(&msg);      // メッセージを送出
        }
    }
    return (int)msg.wParam;
}


// ウィンドウクラスの登録
ATOM InitApp(HINSTANCE hInst) {
    WNDCLASSEX wc;
    wc.cbSize = sizeof(WNDCLASSEX);         // 構造体のサイズ
    wc.style = CS_HREDRAW | CS_VREDRAW;     // クラスのスタイル
    wc.lpfnWndProc = WndProc;               // プロシージャ名
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInst;                   // インスタンス
    wc.hIcon = NULL;
    wc.hCursor = (HCURSOR)LoadImage(
        NULL, MAKEINTRESOURCE(IDC_ARROW),
        IMAGE_CURSOR, 0, 0, LR_DEFAULTSIZE | LR_SHARED
    );
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);     // 背景ブラシ
    wc.lpszMenuName = NULL;                                     // メニュー名
    wc.lpszClassName = szClassName;                             // クラス名
    wc.hIconSm = NULL;

    return (RegisterClassEx(&wc));
}

BOOL InitInstance(HINSTANCE hInst, int nCmdShow) {
    HWND hWnd;

    hWnd = CreateWindow(szClassName,            // クラス名
        TEXT("猫でもわかるKeyプログラム"),     // ウインドウ名
        WS_OVERLAPPEDWINDOW,                    // ウィンドウスタイル
        CW_USEDEFAULT,                          // x位置
        CW_USEDEFAULT,                          // y位置
        240,                            // window幅
        180,                            // window高さ
        NULL,                                   // 親ウィンドウのハンドル、親を作るときはNULL
        NULL,
        hInst,
        NULL
    );
    if (!hWnd)
        return FALSE;
    ShowWindow(hWnd, nCmdShow);                 // ウィンドウの表示状態を設定
    UpdateWindow(hWnd);                         // ウィンドウを更新
    return TRUE;
}

// ウィンドウプロシージャ(コールバック関数)
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp) {
    HDC hdc;
    PAINTSTRUCT ps;
    static HMENU hMenu;
    MMTIME mm;

    switch (msg) {
    case WM_CREATE:
        srand((unsigned int)time(NULL));
        hMenu = GetMenu(hWnd);
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        TextOut(hdc, 0, 0, szMondai, lstrlen(szMondai));
        TextOut(hdc, 0, 40, szInput, lstrlen(szInput));
        if (bSeikai)
            SetTextColor(hdc, RGB(0, 0, 0));
        else
            SetTextColor(hdc, RGB(255, 0, 0));
        TextOut(hdc, 0, 80, szCheck, lstrlen(szCheck));
        EndPaint(hWnd, &ps);
        break;
    case WM_CHAR:
        if (wp == VK_SPACE && (!bStart)) {
            bStart = TRUE;
            TypeStart(hWnd);
            break;
        }
        if (bStart == FALSE)
            return DefWindowProc(hWnd, msg, wp, lp);
        if (wp == VK_ESCAPE) {
            lstrcpy(szMondai, TEXT(""));
            lstrcpy(szInput, TEXT(""));
            lstrcpy(szCheck, TEXT(""));
            InvalidateRect(hWnd, NULL, TRUE);
            bStart = FALSE;
            break;
        }
        wsprintf(szInput, TEXT(" あなたの入力 =\"%c\""), (int)wp);
        if (iMon == (int)wp) {
            bSeikai = TRUE;

            // システム時刻をミリ秒単位で取得
            mm.wType = TIME_MS;
            timeGetSystemTime(&mm, sizeof(MMTIME));
            dwEnd = mm.u.ms;

            wsprintf(szCheck, TEXT(" 反応時間[%d ミリ秒]"), dwEnd - mm.u.ms);
            TypeStart(hWnd);
        }
        else {
            bSeikai = FALSE;
            MessageBeep(MB_OK);
            lstrcpy(szCheck, TEXT(" タイプミス! "));
        }
        InvalidateRect(hWnd, NULL, TRUE);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return (DefWindowProc(hWnd, msg, wp, lp));
    }
    return 0;
}

int TypeStart(HWND hWnd) {
    int n;
    MMTIME mm;

    n = rand() % 26;
    iMon = 'a' + n;
    wsprintf(szMondai, TEXT(" 問題 =\"%c\""), iMon);

    // システム時刻を取得
    mm.wType = TIME_MS;
    timeGetSystemTime(&mm, sizeof(MMTIME));
    dwStart = mm.u.ms;

    InvalidateRect(hWnd, NULL, TRUE);
    return 0;
}