1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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