#pragma once #pragma comment(lib, "user32") fn LRESULT window_callback(HWND window, UINT message, WPARAM w_parameter, LPARAM l_parameter) { return DefWindowProcW(window, message, w_parameter, l_parameter); } fn u8 windowing_initialize() { HINSTANCE instance = GetModuleHandleW(0); windowing_connection.instance = instance; WNDCLASSEXW window_class = { .cbSize = sizeof(window_class), .lpfnWndProc = window_callback, .hInstance = instance, .lpszClassName = L"window", .hCursor = LoadCursorA(0, IDC_ARROW), .hIcon = LoadIcon(instance, MAKEINTRESOURCE(1)), .style = CS_VREDRAW|CS_HREDRAW, }; RegisterClassExW(&window_class); windowing_connection.window_class = window_class; return 1; } fn WindowingInstance* windowing_instantiate(WindowingInstantiate instantiate) { // TODO: WindowingInstance* window = &windowing_instances[0]; window->handle = CreateWindowExW(WS_EX_APPWINDOW, L"window", L"Bloat Buster", WS_OVERLAPPEDWINDOW | WS_SIZEBOX, CW_USEDEFAULT, CW_USEDEFAULT, instantiate.size.width, instantiate.size.height, 0, 0, windowing_connection.instance, 0); ShowWindow(window->handle, SW_SHOW); return window; } fn WindowingSize windowing_get_instance_framebuffer_size(WindowingInstance* instance) { RECT area; GetClientRect(instance->handle, &area); WindowingSize size = { .width = area.right, .height = area.bottom, }; return size; } fn void windowing_poll_events() { MSG msg; HWND handle; while (PeekMessageW(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessageW(&msg); } }