UNIXworkcode

1 /* 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. 3 * 4 * Copyright 2024 Olaf Wintermann. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are met: 8 * 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26 * POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 #include "window.h" 30 #include "Windows.h" 31 32 #include "../common/object.h" 33 34 35 #include <stdbool.h> 36 #include <stdio.h> 37 #include <stdlib.h> 38 39 40 static HINSTANCE hInstance; 41 42 static const char *mainWindowClass = "UiMainWindow"; 43 44 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { 45 switch(uMsg) { 46 case WM_DESTROY: 47 PostQuitMessage(0); 48 break; 49 default: 50 return DefWindowProc(hwnd, uMsg, wParam, lParam); 51 } 52 return 0; 53 } 54 55 void ui_window_init(void) { 56 hInstance = GetModuleHandle(NULL); 57 58 WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; 59 wc.lpfnWndProc = WindowProc; 60 wc.hInstance = hInstance; 61 wc.lpszClassName = mainWindowClass; 62 wc.hCursor = LoadCursor(NULL, IDC_ARROW); 63 wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); 64 65 if(!RegisterClassExA(&wc)) { 66 MessageBox(NULL, "RegisterClassEx failed", "Error", MB_ICONERROR); 67 exit(-1); 68 } 69 } 70 71 static UiObject* create_window(const char *title, void *window_data, bool simple) { 72 UiObject *obj = uic_object_new_toplevel(); 73 obj->window = window_data; 74 75 HWND hwnd = CreateWindowExA( 76 0, 77 "UiMainWindow", 78 title, 79 WS_OVERLAPPEDWINDOW | WS_VISIBLE, 80 CW_USEDEFAULT, 81 CW_USEDEFAULT, 82 800, 83 600, 84 NULL, 85 NULL, 86 hInstance, 87 NULL); 88 89 ShowWindow(hwnd, SW_SHOWNORMAL); 90 UpdateWindow(hwnd); 91 92 return obj; 93 } 94 95 UiObject *ui_window(const char *title, void *window_data) { 96 return create_window(title, window_data, FALSE); 97 } 98 99