Классическое приложение Windows, не выводит графику

В коде оконного приложения есть такой фрагмент для обработки сообщений.

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_COMMAND:
        {
            int wmId = LOWORD(wParam);
            // Разобрать выбор в меню:
            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);
            RECT rcTmp;              // temporary rectangle  
            POINT ptClientUL;        // client area upper left corner  
            POINT ptClientLR;        // client area lower right corner  
            static HDC hdcCompat;    // DC for copying bitmap  
            static POINT pt;         // x and y coordinates of cursor  
            static RECT rcBmp;       // rectangle that encloses bitmap  
            static RECT rcTarget;    // rectangle to receive bitmap  
            static RECT rcClient;    // client-area rectangle  
            static BOOL fDragRect;   // TRUE if bitmap rect. is dragged  
            static HBITMAP hbmp;     // handle of bitmap to display  
            static HBRUSH hbrBkgnd;  // handle of background-color brush  
            static COLORREF crBkgnd; // color of client-area background  
            static HPEN hpenDot;     // handle of dotted pen  
            crBkgnd = GetBkColor(hdc);
            hbrBkgnd = CreateSolidBrush(crBkgnd);
            ReleaseDC(hWnd, hdc);
            hpenDot = CreatePen(PS_DOT, 1, RGB(0, 0, 0));
            FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
            Rectangle(ps.hdc, rcBmp.left, rcBmp.top,
                rcBmp.right, rcBmp.bottom);
            StretchBlt(ps.hdc, rcBmp.left + 1, rcBmp.top + 1,
                (rcBmp.right - rcBmp.left) - 2,
                (rcBmp.bottom - rcBmp.top) - 2, hdcCompat,
                0, 0, 32, 32, SRCCOPY);
            for(int eow=0;eow<10;eow++)
            SetPixel(hdc, 100+eow, 100-eow, RGB(12,20,40));
            SetTextColor(hdc, 0x00FF0000); // синий цвет букв
            TextOut(hdc, 10, 20, _T("=sin()"), 7);
            // TODO: Добавьте сюда любой код прорисовки, использующий HDC...
            EndPaint(hWnd, &ps);
            return FALSE;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

И когда окно выводится, в нём нет ни одного графического элемента из case WM_PAINT:. Судя по отладке, сначала выполняется ShowWindow и UpdateWindow, затем указанные графические команды, а потом TranslateMessage и DispatchMessage. Закрытие окна обоими способами и вызов справки работают нормально.


Ответы (1 шт):

Автор решения: Максим Гаврилов

Прочитал комментарий, переместил ReleaseDC(hWnd, hdc);, поместив перед EndPaint, заработало.

→ Ссылка