The program window wont update when I try to draw a rectangle. It isn't the program not responding because I can still draw the background, but the rectangle wont update and I don't know what to change. There are no errors popping up, and the only warning is:
Warning C28251 Inconsistent annotation for 'WinMain': this instance has no annotations.
This program is in two .cpp files, the first one doesn't create a window (make sure to set that in properties), and the second one does create a window.
Note: the first .cpp file is called render.cpp and is included in the second file.
Here is the code for debugging:
#include <Windows.h>
struct Render_State
{
    int width;
    int hight;
    void* memory;
    BITMAPINFO bitmap_info;
};
Render_State render_state;
void render_backround(HWND hwnd, int colour)
{
    if (WM_PAINT)
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        unsigned int* pixel = (unsigned int*)render_state.memory;
        for (int y = 0; y < render_state.hight; y += 1)
        {
            for (int x = 0; x < render_state.width; x += 1)
            {
                *pixel++ = colour;
            }
        }
        // render
        StretchDIBits(hdc, 0, 0, render_state.width, render_state.hight, 0, 0,
            render_state.width,
            render_state.hight,
            render_state.memory, &render_state.bitmap_info, DIB_RGB_COLORS, SRCCOPY); {}
        EndPaint(hwnd, &ps);
    }
}
void clear_screen(HWND hwnd, int colour)
{
    if (WM_PAINT)
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        unsigned int* pixel = (unsigned int*)render_state.memory;
        for (int y = 0; y < render_state.hight; y += 1)
        {
            for (int x = 0; x < render_state.width; x += 1)
            {
                *pixel++ = colour;
            }
        }
        // render
        StretchDIBits(hdc, 0, 0, render_state.width, render_state.hight, 0, 0, render_state.width,
            render_state.hight,
            render_state.memory, &render_state.bitmap_info, DIB_RGB_COLORS, SRCCOPY); {}
        EndPaint(hwnd, &ps);
    }
}
void draw_rect(HWND hwnd, int X, int Y, int X2, int Y2, int colour)
{
    if (WM_PAINT)
    {
        PAINTSTRUCT ps;
        HDC hdc = BeginPaint(hwnd, &ps);
        for (int y = Y; y < Y2; y++)
        {
            //  unsigned int* pixel = (unsigned int*)render_state.memory;
            size_t pixel = size_t(render_state.memory) + static_cast<size_t>(X) + static_cast<size_t> (y) * static_cast<size_t> (render_state.width);
            for (int x = X; x < X2; x++)
            {
                pixel += 0xf5500;
            }
        }
        // render
        StretchDIBits(hdc, X, Y, X2, Y2, X, Y, render_state.width, render_state.hight,
            render_state.memory, &render_state.bitmap_info, DIB_RGB_COLORS, SRCCOPY); {}
        EndPaint(hwnd, &ps);
    }
}
#include <Windows.h>
bool running = true;
#include "renderer.cpp"
LRESULT CALLBACK windows_callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    LRESULT result = 0;
    switch (uMsg)
    {
    case WM_CLOSE:
    case WM_DESTROY:
    {
        PostQuitMessage(0);
    }
    break;
    case WM_SIZE:
    {
        RECT rect;
        GetClientRect(hwnd, &rect);
        render_state.width = rect.right - rect.left;
        render_state.hight = rect.bottom - rect.top;
        int size = render_state.width * render_state.hight * sizeof(unsigned int);
        if (render_state.memory) VirtualFree(render_state.memory, 0, MEM_RELEASE);
        render_state.memory = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
        render_state.bitmap_info.bmiHeader.biSize = sizeof(render_state.bitmap_info.bmiHeader);
        render_state.bitmap_info.bmiHeader.biWidth = render_state.width;
        render_state.bitmap_info.bmiHeader.biHeight = render_state.hight;
        render_state.bitmap_info.bmiHeader.biPlanes = 1;
        render_state.bitmap_info.bmiHeader.biBitCount = 32;
        render_state.bitmap_info.bmiHeader.biCompression = BI_RGB;
         //render_backround(hwnd, 0xf2000);
        //clear_screen(hwnd, 0xff5500);
        draw_rect(hwnd, 3, 5, 50, 50, 0xff5500);
    }
    break;
    default:
    {
        result = DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
    }
    return result;
}
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    //compile window
    CHAR clsName[] = "test";
    WNDCLASSA window_class = {};
    window_class.style = CS_HREDRAW | CS_VREDRAW;
    window_class.lpszClassName = clsName;
    window_class.lpfnWndProc = windows_callback;
    //register clases
    ATOM atom = RegisterClassA(&window_class);
    if (0 == atom)
    {
        DWORD err = GetLastError();
        return 1;
    }
    // create window
    HWND window = CreateWindow(clsName, "game", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT,
        CW_USEDEFAULT, 720, 360, 0, 0, hInstance, 0);
    if (NULL == window)
    {
        DWORD err = GetLastError();
        return 1;
    }
    MSG message;
    HDC hdc = GetDC(window);
    // Main message loop:
    while (GetMessage(&message, nullptr, 0, 0))
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }
    //simulate
    //render
    StretchDIBits(hdc, 0, 0, render_state.width, render_state.hight, 0, 0, render_state.width,
        render_state.hight,
        render_state.memory, &render_state.bitmap_info, DIB_RGB_COLORS, SRCCOPY); {}
}
 
     
    