Win32: мое приложение зависает, пока пользователь изменяет размер окна

Я пишу приложение Win32. Я сам реализовал цикл сообщений следующим образом:

     bool programcontinue = true;
     while(programcontinue)
     {
              while (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))
              {
                       TranslateMessage(&Msg);
                       DispatchMessage(&Msg);
              }

              IdleProcess();
     }

В моем приложении есть окно с изменяемым размером. Обычно IdleProcess () вызывается несколько раз в секунду. Когда пользователь захватывает угол или край окна с изменяемым размером, IdleProcess () больше не вызывается, пока пользователь не отпустит кнопку мыши.

Что здесь происходит?

Я попытался обменять внутреннее время с помощью if, но это не меняет поведения. Кажется, что когда начинается изменение размера, обработчик для этого сообщения не возвращается, пока изменение размера не будет сделано?

Есть ли способ изменить это и вызвать IdleProcess () при изменении размера несколько раз в секунду?

Спасибо Марк

РЕДАКТИРОВАТЬ:

Что я имею в виду, заменяя внутреннее время на if:

 bool programcontinue = true;
 while(programcontinue)
 {
          if (PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))  // <<<<
          {
                   TranslateMessage(&Msg);
                   DispatchMessage(&Msg);
          }

          IdleProcess();
 }

Мое окно Proc немного длинное, но я получаю то же поведение с небольшим тестовым приложением. Это идентично wndproc, который создает Мастер проекта VS:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;

    switch (message)
    {
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: Add any drawing code here...
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Ответы на вопрос(4)

Ваш ответ на вопрос