| 50 |
50 |
| 51 static HINSTANCE hInstance; |
51 static HINSTANCE hInstance; |
| 52 |
52 |
| 53 static const char *mainWindowClass = "UiMainWindow"; |
53 static const char *mainWindowClass = "UiMainWindow"; |
| 54 |
54 |
| 55 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { |
|
| 56 W32Widget *widget = (W32Widget*)GetWindowLongPtr(hwnd, GWLP_USERDATA); |
|
| 57 if (widget && widget->wclass->eventproc) { |
|
| 58 widget->wclass->eventproc(widget, hwnd, uMsg, wParam, lParam); |
|
| 59 } |
|
| 60 switch(uMsg) { |
|
| 61 case WM_DESTROY: { |
|
| 62 PostQuitMessage(0); |
|
| 63 break; |
|
| 64 } |
|
| 65 case WM_COMMAND: { |
|
| 66 HWND hwndCtrl = (HWND)lParam; |
|
| 67 W32Widget *cmdWidget = (W32Widget*)GetWindowLongPtr(hwndCtrl, GWLP_USERDATA); |
|
| 68 if (cmdWidget && cmdWidget->wclass->eventproc) { |
|
| 69 cmdWidget->wclass->eventproc(cmdWidget, hwnd, uMsg, wParam, lParam); |
|
| 70 } |
|
| 71 } |
|
| 72 case WM_SIZE: { |
|
| 73 int width = LOWORD(lParam); |
|
| 74 int height = HIWORD(lParam); |
|
| 75 if (widget->layout) { |
|
| 76 widget->layout(widget->layoutmanager, width, height); |
|
| 77 } |
|
| 78 break; |
|
| 79 } |
|
| 80 default: return DefWindowProc(hwnd, uMsg, wParam, lParam); |
|
| 81 } |
|
| 82 return 0; |
|
| 83 } |
|
| 84 |
55 |
| 85 void ui_window_init(void) { |
56 void ui_window_init(void) { |
| 86 hInstance = GetModuleHandle(NULL); |
57 hInstance = GetModuleHandle(NULL); |
| 87 |
58 |
| 88 WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; |
59 WNDCLASSEX wc = { sizeof(WNDCLASSEX) }; |
| 89 wc.lpfnWndProc = WindowProc; |
60 wc.lpfnWndProc = ui_default_eventproc; |
| 90 wc.hInstance = hInstance; |
61 wc.hInstance = hInstance; |
| 91 wc.lpszClassName = mainWindowClass; |
62 wc.lpszClassName = mainWindowClass; |
| 92 wc.hCursor = LoadCursor(NULL, IDC_ARROW); |
63 wc.hCursor = LoadCursor(NULL, IDC_ARROW); |
| 93 wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); |
64 wc.hbrBackground = GetSysColorBrush(COLOR_BTNFACE); |
| 94 |
65 |