Почему рисование на HDC не обновляет окно немедленно? - PullRequest
0 голосов
/ 19 сентября 2018

Согласно этому веб-сайту , любая операция рисования, выполненная на HDC, возвращенная BeginPaint, будет немедленно отображаться на экране.Однако число, напечатанное следующим кодом, обновляется только при изменении размера окна:

int counter = 0;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(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:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);
            std::string s = std::to_string(counter).c_str();
            TextOutA(hdc, 0, 0, s.c_str(), s.length());
            EndPaint(hWnd, &ps);
        }
        break;
    case WM_KEYDOWN:
        counter++;
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

Даже при непрерывной отправке WM_PAINT в окно с

RedrawWindow(hwndMain, 0, 0, RDW_INTERNALPAINT);

после EndPaint, только числообновляется при изменении размера окна.Как я могу получить номер для обновления без изменения размера окна вручную?

1 Ответ

0 голосов
/ 19 сентября 2018

Вызов RedrawWindow с разными флагами решил проблему.В частности RedrawWindow(hWnd, 0, 0, RDW_FRAME | RDW_INVALIDATE); после counter++;

...