Win32: Meine Anwendung friert ein, während der Benutzer die Fenstergröße ändert

Ich schreibe eine Win32-Anwendung. Ich habe die Nachrichtenschleife selbst folgendermaßen implementiert:

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

              IdleProcess();
     }

In meiner Anwendung befindet sich ein Fenster, dessen Größe geändert werden kann. Normalerweise wird IdleProcess () mehrmals pro Sekunde aufgerufen. Wenn der Benutzer eine Ecke oder einen Rand des Fensters mit veränderbarer Größe ergreift, wird IdleProcess () erst dann aufgerufen, wenn der Benutzer die Maustaste loslässt.

Was geschieht hier

Ich habe versucht, das Innere mit einem Wenn zu tauschen, aber das ändert nichts am Verhalten. Es sieht so aus, als würde der Handler für diese Nachricht zu Beginn der Größenänderung erst zurückkehren, wenn die Größenänderung abgeschlossen is

Gibt es eine Möglichkeit, dies zu ändern und IdleProcess () während der Größenänderung einige Male pro Sekunde aufzurufen?

Danke Marc

BEARBEITEN

Was ich meine, indem ich das Innere durch "if" ersetze, ist:

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

          IdleProcess();
 }

Mein Fenster Proc ist ein bisschen langwierig, aber ich bekomme das gleiche Verhalten mit einer kleinen Test-App. Dies ist identisch mit dem vom VS-Projekt-Assistenten erstellten wndproc:

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;
}